मैं एक ऐप लॉक एप्लिकेशन बना रहा हूं, lollipop.getRunningTaskinfo विधि में वर्तमान चल रहे कार्य को कैसे लॉलीपॉप एपीआई में हटा दिया गया है, फिर समस्या को कैसे खत्म किया जाए।लॉलीपॉप में टोपएक्टिविटी नाम कैसे प्राप्त करें या वर्तमान चल रहे एप्लिकेशन पैकेज का नाम प्राप्त करें?
उत्तर
इस प्रयास करें:
ActivityManager mActivityManager =(ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);
if(Build.VERSION.SDK_INT > 20){
String mPackageName = mActivityManager.getRunningAppProcesses().get(0).processName;
}
else{
String mpackageName = mActivityManager.getRunningTasks(1).get(0).topActivity.getPackageName();
}
हम UsageStats का उपयोग कर प्राप्त कर सकते हैं:
public static String getTopAppName(Context context) {
ActivityManager mActivityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
String strName = "";
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
strName = getLollipopFGAppPackageName(context);
} else {
strName = mActivityManager.getRunningTasks(1).get(0).topActivity.getClassName();
}
} catch (Exception e) {
e.printStackTrace();
}
return strName;
}
private static String getLollipopFGAppPackageName(Context ctx) {
try {
UsageStatsManager usageStatsManager = (UsageStatsManager) ctx.getSystemService("usagestats");
long milliSecs = 60 * 1000;
Date date = new Date();
List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, date.getTime() - milliSecs, date.getTime());
if (queryUsageStats.size() > 0) {
Log.i("LPU", "queryUsageStats size: " + queryUsageStats.size());
}
long recentTime = 0;
String recentPkg = "";
for (int i = 0; i < queryUsageStats.size(); i++) {
UsageStats stats = queryUsageStats.get(i);
if (i == 0 && !"org.pervacio.pvadiag".equals(stats.getPackageName())) {
Log.i("LPU", "PackageName: " + stats.getPackageName() + " " + stats.getLastTimeStamp());
}
if (stats.getLastTimeStamp() > recentTime) {
recentTime = stats.getLastTimeStamp();
recentPkg = stats.getPackageName();
}
}
return recentPkg;
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
// USAGE_STATS सक्षम करने के लिए
// Declare USAGE_STATS permisssion in manifest
<uses-permission
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
startActivity(intent);
इस तरह से प्राप्त किया जा सकता है .....
ActivityManager am =(ActivityManager)context.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1);
ActivityManager.RunningTaskInfo task = tasks.get(0); // current task
ComponentName rootActivity = task.baseActivity;
rootActivity.getPackageName();//*currently active applications package name*
,210
लॉलीपॉप के लिए:
ActivityManager mActivityManager =(ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);
if(Build.VERSION.SDK_INT > 20){
String activityName =mActivityManager.getRunningAppProcesses().get(0).processName;
}
else{
String activityName = mActivityManager.getRunningTasks(1).get(0).topActivity.getPackageName();
}
पूरा उदाहरण के लिए check this out...
'getRunningTasks' एंड्रॉइड 5 में कुछ कार्यों के लिए काम नहीं करता है। – Sam
[getRunningAppProcesses] (https://developer.android.com/reference/android/app/ActivityManager.html#getRunningAppProcesses()) केवल एक चेतावनी के साथ आता है इसका उपयोग करते समय डीबग मोड – Clocker
@ एसएएम ने मेरा जवाब संपादित किया। –
आपको यकीन है? जैसा कि मैं नवीनतम एंड्रॉइड दस्तावेज़ों के अनुसार देख सकता हूं, लॉलीपॉप अपडेट आपको अपने ऐप्स की तुलना में अन्य ऐप्स के बारे में कोई जानकारी नहीं देता है !?
http://developer.android.com/reference/android/app/ActivityManager.html आप देख सकते हैं कि उन सभी विधियों को हटा दिया गया है!
इसे आज़माएं .. यह मेरे लिए काम करता है।
ActivityManager activityManager = (ActivityManager) getSystemService (Context.ACTIVITY_SERVICE);
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP)
{
String packageName = activityManager.getRunningAppProcesses().get(0).processName;
}
else if(Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP)
{
String packageName = ProcessManager.getRunningForegroundApps(getApplicationContext()).get(0).getPackageName();
}
else
{
String packageName = activityManager.getRunningTasks(1).get(0).topActivity.getPackageName();
}
पर काम नहीं कर रहा है ProcessManager क्या है? –
ध्यान दें कि '.processName' हमेशा प्रक्रिया का पैकेज नाम नहीं होगा। – Sam
मैंने अभी एक त्वरित Google खोज की है, और 'ProcessManager' ['AndroidProcesses'] (https://github.com/jaredrummler/AndroidProcesses) लाइब्रेरी में एक बहिष्कृत वर्ग प्रतीत होता है। – Sam
एपीआई 21 या ऊपर में रनिंग ऐप पाने का सबसे अच्छा समाधान नीचे आज़माएं। मुझे
private String retriveNewApp() {
if (VERSION.SDK_INT >= 21) {
String currentApp = null;
UsageStatsManager usm = (UsageStatsManager) this.getSystemService(Context.USAGE_STATS_SERVICE);
long time = System.currentTimeMillis();
List<UsageStats> applist = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, time - 1000 * 1000, time);
if (applist != null && applist.size() > 0) {
SortedMap<Long, UsageStats> mySortedMap = new TreeMap<>();
for (UsageStats usageStats : applist) {
mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);
}
if (mySortedMap != null && !mySortedMap.isEmpty()) {
currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
}
}
Log.e(TAG, "Current App in foreground is: " + currentApp);
return currentApp;
}
else {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
String mm=(manager.getRunningTasks(1).get(0)).topActivity.getPackageName();
Log.e(TAG, "Current App in foreground is: " + mm);
return mm;
}
}
एसडीके_INटी> = 21 मामले के बारे में, किस ऐप्स में उनकी प्रक्रियाएं अभी भी जिंदा हैं? –
काम नहीं कर रहा है शून्य –
के लिए यह काम मैं शीर्ष गतिविधि नाम होने का एक hacky तरह से इस्तेमाल करते हैं। जब भी मैं किसी गतिविधि को बना या फिर से शुरू करता हूं, तो मैं नाम साझाकरण में सहेजता हूं। मैंने सहेजे गए और SharePreferences से शीर्ष क्लास प्राप्त करने के लिए दो फ़ंक्शन बनाए हैं। यह हमेशा अंतिम गतिविधि को ओवरराइट करता है और शीर्ष गतिविधि देता है। मुझे अनुमतियों और API स्तरों के बारे में चिंता करने की ज़रूरत नहीं है। बहुत सरल लेकिन निश्चित रूप से ऐसा करने का सबसे अच्छा तरीका नहीं है।
क्षमा करें, लेकिन सवाल उन ऐप्स के बारे में पूछता है जो आपके पैकेज के नाम के समान नहीं हैं – Penn
वर्तमान रनिंग ऐप प्राप्त करने के लिए आप AccessibilityService का उपयोग कर सकते हैं। अभिगम्यता सेवा ऑनएक्सेबिलिटीवेंट ईवेंट प्रदान करती है।
कुछ नमूना कोड निम्नलिखित है।
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
if (event.getPackageName() != null && event.getClassName() != null) {
Log.d("Foreground App", event.getPackageName().toString());
}
}
}
आप here
- 1. वर्तमान चल रहे मॉड्यूल पथ/नाम को कैसे प्राप्त करें
- 2. वर्तमान सक्रिय एप्लिकेशन का नाम प्राप्त करें
- 3. जावा में चल रहे फ़ाइल का नाम प्राप्त करें?
- 4. वर्तमान क्लिकऑन के एप्लिकेशन प्रकाशक का नाम प्राप्त करें?
- 5. वर्तमान में स्पॉक में चल रहे परीक्षण का नाम कैसे प्राप्त करें?
- 6. वर्तमान फ़ंक्शन का नाम कैसे प्राप्त करें?
- 7. एंड्रॉइड 5.0 (एल) में चल रहे एप्लिकेशन गतिविधि का नाम कैसे प्राप्त करें?
- 8. एप्लिकेशन का प्रक्रिया नाम कैसे प्राप्त करें?
- 9. वर्तमान पर्यावरण का नाम प्राप्त करें
- 10. वर्तमान उपयोगकर्ता का नाम प्राप्त करें
- 11. वर्तमान कक्षा का नाम प्राप्त करें?
- 12. एक्शनस्क्रिप्ट - वर्तमान फ़ंक्शन का नाम प्राप्त करें
- 13. PHP वर्तमान निर्देशिका का नाम प्राप्त करें
- 14. विंडोज़ में चल रहे एप्लिकेशन कैसे प्राप्त करें?
- 15. एंड्रॉइड, पैकेज नाम कैसे प्राप्त करें?
- 16. पैकेज नाम से आवेदन जानकारी प्राप्त करें
- 17. जेएसपी में वर्तमान पृष्ठ का नाम कैसे प्राप्त करें?
- 18. पायथन - पूर्ण पैकेज मॉड्यूल नाम प्राप्त करें
- 19. शेयरपॉइंट वर्तमान उपयोगकर्ता खाता नाम प्राप्त करें?
- 20. नाम से चल रहे प्रक्रिया का मार्ग प्राप्त करना
- 21. डेल्फी 7 में वर्तमान विधि का नाम कैसे प्राप्त करें?
- 22. मैं वर्तमान में एक्सकोड में चल रहे लक्ष्य का नाम कैसे प्राप्त करूं?
- 23. जेएसपी या जेएसटीएल में पृष्ठ का नाम कैसे प्राप्त करें?
- 24. एंड्रॉइड में एप्लिकेशन का नाम कैसे प्राप्त करें?
- 25. डेटाटेबल कॉलम का नाम कैसे प्राप्त करें?
- 26. पैकेज के बिना कक्षा का नाम कैसे प्राप्त करें?
- 27. वर्तमान निर्देशिका का मूल फ़ोल्डर नाम कैसे प्राप्त करें?
- 28. कॉलिंग विधि का नाम कैसे प्राप्त करें?
- 29. एंड्रॉइड - प्रक्रिया कैसे प्राप्त करें नाम या पैकेज नाम पीआईडी का उपयोग करके?
- 30. वर्तमान प्रक्रिया में सभी हैंडल का नाम प्राप्त करें
आप घटनाओं (नहीं उपयोग के आँकड़े) के लिए क्वेरी करने के लिए इस्तेमाल कर सकते हैं UsageStatsManager उपयोग सेवा है के बारे में अधिक जानकारी प्राप्त कर सकते है, लेकिन प्रति प्रलेखन के रूप में, पिछले मिनट (वास्तव में सेकंड) को काट रहे हैं गैर-सिस्टम अनुप्रयोगों को यह जानने के लिए रोकें कि वर्तमान में कौन सा एप्लिकेशन चल रहा है। –