मेरे पास एक एंड्रॉइड एप्लिकेशन है, मुझे एक फ़ंक्शन या ऐसी कोई भी चीज़ चाहिए जो यह जांच सके कि ऐप बंद है या नहीं, गतिविधि बंद नहीं है। मेरे पास इस तरह का एक ऐप है, यदि आप 10 सेकंड के लिए ऐप का उपयोग करते हैं, तो आप कहीं भी किसी भी गतिविधि में हैं, आपको "टाइम आउट" अधिसूचना प्राप्त होगी। मैं ऐसा करने के लिए टाइमर का उपयोग करता हूं, शुरुआत के लिए सब कुछ ठीक काम करता है। हालांकि, जब मैं ऐप बंद करता हूं, तो ऐप को अगली शुरुआत के लिए समय बचा जाना चाहिए। उदाहरण के लिए: यदि मेरे पास केवल 5 सेकंड शेष हैं, तो मैं ऐप बंद कर देता हूं। अगली बार जब मैं ऐप खोलूंगा, तो टाइमर 5 सेकंड से शुरू होगा, 10 सेकंड से नहीं। अगर मैं वेलकमफर्स्ट (गतिविधि जो टाइमर में प्रवेश करता है) पर रुका तो कोई समस्या नहीं है, लेकिन अगर मैं अगली गतिविधि पर जाता हूं, तो टाइमर रद्द कर दिया जाएगा। मैं नहीं चाहता कि, ऐप बंद होने पर ही टाइमर रद्द हो जाएगा।

क्या यह जांचने का कोई तरीका है कि ऐप बंद है या गतिविधि बंद है? मैं गतिविधि लाइफसाइकिल कॉलबैक और एप्लिकेशन क्लास का उपयोग करता हूं। मैं इस समारोह को भी आजमाता हूं

private boolean isAppRunning() {
    ActivityManager m = (ActivityManager) this.getSystemService( ACTIVITY_SERVICE );
    List<ActivityManager.RunningTaskInfo> runningTaskInfoList =  m.getRunningTasks(10);
    Iterator<ActivityManager.RunningTaskInfo> itr = runningTaskInfoList.iterator();
    int n=0;
    while(itr.hasNext()){
        n++;
        itr.next();
    }
    if(n==1){ // App is killed
        return false;
    }

    return true; // App is in background or foreground
}

यह काम नहीं करता।

मेरा कोड

public class App extends Application implements Application.ActivityLifecycleCallbacks {

private Long START_TIME_IN_MILLIS  = 6000;
private  Boolean  mTimerRunning = false;
private Long mTimeLeftInMillis  = START_TIME_IN_MILLIS;
private  CountDownTimer mCountDownTimer;

@Override

public void onCreate() {
        super.onCreate();
       registerActivityLifecycleCallbacks(this);
    }
 @Override
    public void onActivityStarted(Activity activity) {

     //if the activity is WelcomeFirst then init the timer
      if (activity.localClassName == "WelcomeFirst") {
            SharedPreferences prefs = getSharedPreferences("prefsDay", Context.MODE_PRIVATE);
            mTimeLeftInMillis = prefs.getLong("millisLeft", 10000);
            mTimerRunning = prefs.getBoolean("timerRunning", false);
            startTimer();
        }
   
}

@Override
public void onActivityStopped(Activity activity) {

    //The code below mean if the Activity WelcomeFirst is closed then save the millisLeft for the next start.

if (activity.localClassName == "WelcomeFirst")  {
             mCountDownTimer.cancel();
              mTimerRunning = false;
            SharedPreferences prefs = getSharedPreferences("prefsDay", Context.MODE_PRIVATE);
            Editor editor = prefs.edit();
            editor.putLong("millisLeft", mTimeLeftInMillis);
            editor.putBoolean("timerRunning", mTimerRunning);
            editor.apply();
        }
       
     //I want to make the change. If The App is closed, then save the millisLeft for the next start.

     //Not the Activity is closed, then save the millisLeft for the next start
}

  private void startTimer() {
        mCountDownTimer = new CountDownTimer(mTimeLeftInMillis, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                mTimeLeftInMillis = millisUntilFinished;
         
            }
        @Override
        public void onFinish() {
            mTimerRunning = false;
            Toast.makeText(this, "Time Out",Toast.LENGTH_SHORT).show()
        }

    }.start();
    mTimerRunning = true;
}
1
Nghia Huy Hoang 11 जुलाई 2020, 21:00

1 उत्तर

सबसे बढ़िया उत्तर

प्रक्रिया का प्रयोग करें LifeCyclerManager आपकी समस्या का समाधान करेगा। https://medium.com/trendyol-tech/android-architecture- घटक-प्रक्रियाजीवनचक्रस्वामी-26aa905d4bc5

0
John 16 जुलाई 2020, 17:15