請建議我如何獲取當前打開的應用程序名稱,即使設備上有主屏幕,我也會發現「主屏幕已打開」。Android:我如何才能在屏幕上獲取當前打開的應用程序名稱
回答
在這裏你去
ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
List l = am.getRecentTasks(1, ActivityManager.RECENT_WITH_EXCLUDED);
Iterator i = l.iterator();
PackageManager pm = this.getPackageManager();
while (i.hasNext()) {
ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next());
try {
CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(
info.processName, PackageManager.GET_META_DATA));
Log.w("LABEL", c.toString());
} catch (Exception e) {
// Name Not FOund Exception
}
}
嘿謝謝你..你可以建議,哪些android用戶權限是需要這行 - info.processName,PackageManager.GET_META_DATA)); –
嘿,我做了..謝謝你Vipul Shah。 –
你能編輯這個答案並在這裏發表嗎? –
有了這個,你可以得到當前的應用程序名稱
Resources appR = getApplicationContext().getResources();
CharSequence txt = appR.getText(appR.getIdentifier("app_name","string", getApplicationContext().getPackageName()));
System.out.println(txt+" APp Name");
獲得活動嘿嘿感謝您的回覆,但讓我知道,如果我在後臺運行這個,那麼它給出了當前在屏幕上顯示的其他打開的應用程序名稱? –
你也可以列出正在運行的任務用下面的代碼:
ActivityManager am = (ActivityManager) getApplicationContext().getSystemService(ACTIVITY_SERVICE);
List li = am.getRunningTasks(100);
Iterator i = li.iterator();
PackageManager pm = getApplicationContext().getPackageManager();
while (i.hasNext()) {
try {
ActivityManager.RunningTaskInfo info = (ActivityManager.RunningTaskInfo)(i.next());
String ac = info.baseActivity.getPackageName();
CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(
ac, PackageManager.GET_META_DATA));
Log.v("asd", c.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
對我來說上面的例子不起作用。所以,我結束了使用此:
ActivityManager am = (ActivityManager) this
.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RecentTaskInfo> l = am.getRecentTasks(1,
ActivityManager.RECENT_WITH_EXCLUDED);
Iterator<ActivityManager.RecentTaskInfo> i = l.iterator();
PackageManager pm = this.getPackageManager();
while (i.hasNext()) {
try {
Intent intent = i.next().baseIntent;
List<ResolveInfo> list = pm.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(
list.get(0).activityInfo.packageName,
PackageManager.GET_META_DATA));
Toast.makeText(this, "Application name: " + c.toString(),
Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(this,
"Application name not found: " + e.toString(),
Toast.LENGTH_LONG).show();
}
}
從API Level 21開始,ActivityManager .getRececntTask已棄用! –
只需使用此代碼
getActivity().getApplicationInfo().packageName
它給你的應用程序信息,然後調用包的名稱。
使用的AccessibilityService
- 您可以通過使用AccessibilityService檢測當前活動窗口。
- 在onAccessibilityEvent回調中,檢查TYPE_WINDOW_STATE_CHANGED事件類型以確定當前窗口何時更改。
- 通過調用PackageManager.getActivityInfo()來檢查窗口是否爲活動。
我測試並通過Android 7.1(API 25)在Android 2.2(API 8)中工作。
public class MyAccessibilityService extends AccessibilityService {
@Override
protected void onServiceConnected() {
super.onServiceConnected();
//Configure these here for compatibility with API 13 and below.
AccessibilityServiceInfo config = new AccessibilityServiceInfo();
config.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED;
config.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
if (Build.VERSION.SDK_INT >= 16)
//Just in case this helps
config.flags = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;
setServiceInfo(config);
}
@Override
public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent) {
Log.d("ABC-",accessibilityEvent.getPackageName()+" -- "+accessibilityEvent.getClassName());
if (accessibilityEvent.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
if (accessibilityEvent.getPackageName() != null && accessibilityEvent.getClassName() != null) {
ComponentName componentName = new ComponentName(
accessibilityEvent.getPackageName().toString(),
accessibilityEvent.getClassName().toString()
);
ActivityInfo activityInfo = tryGetActivity(componentName);
boolean isActivity = activityInfo != null;
if (isActivity)
Log.i("CurrentActivity", componentName.flattenToShortString());
}
}
}
private ActivityInfo tryGetActivity(ComponentName componentName) {
try {
return getPackageManager().getActivityInfo(componentName, 0);
} catch (PackageManager.NameNotFoundException e) {
return null;
}
}
@Override
public void onInterrupt() {
}
}
- 1. Android獲取當前打開的應用程序的包名稱
- 2. 我如何才能在android中獲取當前城市名稱?
- 3. 如何獲取在Android主屏幕上看到的應用程序的名稱?
- 4. 如何在C#中獲取當前應用程序的名稱
- 5. 如何獲取在前臺服務中的屏幕上顯示的應用程序的包名稱,android?
- 6. 如何在當前運行的屏幕上獲取應用程序菜單
- 7. Android AlarmManager在前臺應用程序中打開屏幕
- 8. 如何獲取當前連接的屏幕會話名稱?
- 9. 如何獲取用戶當前打開的應用程序?
- 10. 如何去前面的屏幕上,從當前的屏幕在Android應用
- 11. 在Android主屏幕上更改應用程序名稱
- 12. Android:我應該如何從我的應用程序打開主屏幕?
- 13. 如何在android中獲取最近打開的應用程序名稱?
- 14. 當我的android應用程序打開時獲取當前位置一次
- 15. Win32 C++如何獲取當前應用程序服務名稱
- 16. 如何獲取當前在辦公室的應用程序當前運行的應用程序的名稱2013
- 17. 擴展程序獲取當前打開的應用程序
- 18. 獲取當前前臺應用程序的名稱
- 19. Android在屏幕上打開
- 20. 獲取在前臺運行的應用程序的名稱:android
- 21. 從Twitter獲取當前用戶屏幕名稱
- 22. 如何在每個屏幕上不顯示Android應用程序名稱
- 23. 如何獲得域名鏈接以在Android上打開我的應用程序?
- 24. 在Xamarin Forms應用程序中獲取當前頁面名稱
- 25. Android Twitter Oauth獲取屏幕名稱
- 26. 如何從上下文處理器獲取當前應用程序名稱?
- 27. 如何從「最近打開的應用程序」中獲取屏幕截圖?
- 28. 在打開應用程序時獲取當前位置
- 29. 在打開應用程序時自動獲取當前位置
- 30. 如何在我的應用程序打開後立即開始屏幕錄製?
您可以通過http://stackoverflow.com/questions/3873659/android-how-can-i-get-the-current-foreground-activity-from-a-service –