मैं इसे करने के दो तरीके के बारे में सोच सकते हैं। इधर, कुछ कोड का उपयोग कर सकते है मैं एक और उत्तर से ले लिया:
ActivityManager सेवा से चल रहे कार्यों के की सूची प्राप्त करने के लिए एक आसान तरीका नहीं है। आप फ़ोन पर चल रहे कार्यों की अधिकतम संख्या का अनुरोध कर सकते हैं, और डिफ़ॉल्ट रूप से, वर्तमान में सक्रिय कार्य पहले लौटाया गया है।
एक बार आपके पास यह है कि आप को अपनी सूची से शीर्ष सक्रियता का अनुरोध करके एक घटक नाम वस्तु प्राप्त कर सकते हैं।
यहां एक उदाहरण है। जवाब देने के लिए
<uses-permission android:name="android.permission.GET_TASKS"/>
लिंक::
ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
// get the info from the currently running task
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
Log.d("topActivity", "CURRENT Activity ::"
+ taskInfo.get(0).topActivity.getClassName());
ComponentName componentInfo = taskInfo.get(0).topActivity;
componentInfo.getPackageName();
आप अपने प्रकट पर निम्न अनुमति की आवश्यकता होगी Android: How can I get the current foreground activity (from a service)?
आप अपने ऐप अगर पता लगाने के लिए इस हर एक सेकंड या उससे कम कॉल कर सकते हैं अभी भी सक्रिय हैकृपया ध्यान दें कि यह एक अनुचित बताया गया है और चीजों की इस तरह के प्रयोग करने के लिए अनुशंसित नहीं है, आधिकारिक दस्तावेज के अनुसार:
getRunningTasks()
नोट: इस विधि केवल डीबगिंग के लिए इरादा है और पेश कार्य प्रबंधन उपयोगकर्ता इंटरफेस। इसका उपयोग किसी भी अनुप्रयोग में कोर लॉजिक के लिए कभी भी नहीं किया जाना चाहिए, जैसे यहां पाए गए जानकारी पर विभिन्न व्यवहारों के बीच के बीच निर्णय लेना। ऐसे उपयोग समर्थित नहीं हैं, और भविष्य में संभावित रूप से टूट जाएगा। उदाहरण के लिए, यदि एकाधिक अनुप्रयोग सक्रिय रूप से एक ही समय में चल रहे हैं, तो के बारे में धारणाएं नियंत्रण प्रवाह के प्रयोजनों के लिए यहां डेटा का अर्थ गलत होगा।
विकल्प 2:
दूसरा विकल्प अगर आपके आवेदन पर है एक वर्ग है कि एक ध्वज के साथ Application
फैली हुई है, उदाहरण के लिए isAppRunning
है, जो सच या अनुसार झूठी हो जाएगा बनाने के लिए है foreground या नहीं:
public class MyAppContext extends Application {
public boolean isAppRunning = true;
public void setIsAppRunning(boolean v){
isAppRunning = v;
}
public boolean isAppRunning(){
return isAppRunning;
}
}
Then पर अपने AndroidManifest.xml
आप Have को add इस class इतना यह इच्छाशक्ति be used when अपने applic आयन शुरू होता है। हर बार
class BaseActivity extends Activity {
@Override
protected void onResume() {
super.onResume();
((MyAppContext)getApplication()).setIsAppRunning(true);
}
@Override
protected void onPause() {
((MyAppContext)getApplication()).setIsAppRunning(false);
super.onPause();
}
}
इस तरह पर आप: हर गतिविधि आप आप onResume()
और onPause()
ओवरराइड और इसी मूल्य को ध्वज सेट करना चाहिए कि में
<application
android:name=".MyAppContext"
अब: बस आवेदन टैग के तहत android:name=".MyAppContext"
जोड़ने MyAppContext
में isAppRunning
में होगा, लेकिन यदि कोई अन्य गतिविधि खुलती है (उदाहरण के लिए यदि आप बैक बटन दबाते हैं तो आप वापस लौट रहे हैं पिछली गतिविधि) मूल्य तुरंत true
होगा।
जब आप अंत में अपने सभी क्रियाएँ onResume()
तरीकों में से कोई भी बुलाया जाएगा समाप्त करने और सभी onPause()
तरीकों बुलाया जाएगा तो isAppRunning
false
हो जाएगा और आप जानते हैं कि आपके Activity
नहीं रह गया है अग्रभूमि पर।
तो isAppRunning
true
आपका आवेदन अग्रभूमि पर है (सत्र ट्रैकिंग शुरू करें) अन्यथा यह चला गया है (सत्र ट्रैकिंग रोकें)। आप समय-समय isAppRunning
के मान की जाँच करने के लिए एक MyAppContext
में Timer
वर्ग बना सकते हैं, तो यह होगा:
public class MyAppContext extends Application {
public boolean isAppRunning = true;
public final int timerRate = 500; // Execute timer task every 500mS
public void setIsAppRunning(boolean v){
isAppRunning = v;
}
public boolean isAppRunning(){
return isAppRunning;
}
@Override
public void onCreate() {
super.onCreate();
Timer mTimer = new Timer();
mTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
if(isAppRunning) startSesionTracking();
else stopSesionTracking();
}
}, 0, REFRESH_TIME);
}
private void startSesionTracking() { ... };
private void stopSesionTracking() { ... };
}
आप सटीक आप अपने सत्र ट्रैकिंग में प्राप्त करना चाहते हैं के अनुसार timerRate
संशोधित करना चाहिए।
इसलिए ऑनपॉज़ का उपयोग करने से यह ऐप जानकारी नहीं देगी कि यह किसी अन्य ऐप या किसी अन्य गतिविधि पर स्विच कर रहा है ... – Kasma
नहीं, यह गतिविधियां काम करने के तरीके का एक हिस्सा है, यह तब चलता है जब गतिविधि फ़ोकस में नहीं होती है। यह तब होता है जब उपयोगकर्ता किसी अन्य ऐप पर स्विच करता है, एक और ऐप अग्रभूमि फोकस लेता है (मैंने देखा है कि यदि आप कीबोर्ड पर शब्दकोश में कोई शब्द जोड़ते हैं तो यह होता है) और यहां तक कि जब डिवाइस उपयोगकर्ता द्वारा लॉक किया जाता है, या स्क्रीन-टाइमआउट लॉक करता है डिवाइस। – EvilGeniusJamie
लेकिन यह ट्रैक करने के लिए कि क्या यह किसी अन्य गतिविधि पर जा रहा है ... – Kasma