Android:如何在屏幕上获取当前打开的应用程序名称
请建议我如何获取当前打开的应用程序名称,即使设备上有主屏幕,我也会发现“主屏幕已打开”。通过此操作,您可以获取当前的应用程序名称Android:如何在屏幕上获取当前打开的应用程序名称,android,Android,请建议我如何获取当前打开的应用程序名称,即使设备上有主屏幕,我也会发现“主屏幕已打开”。通过此操作,您可以获取当前的应用程序名称 Resources appR = getApplicationContext().getResources(); CharSequence txt = appR.getText(appR.getIdentifier("app_name","string", getApplicationContext().getPackageName())); System.o
Resources appR = getApplicationContext().getResources();
CharSequence txt = appR.getText(appR.getIdentifier("app_name","string", getApplicationContext().getPackageName()));
System.out.println(txt+" APp Name");
给你
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
}
}
您还可以使用以下代码列出正在运行的任务:
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();
}
}
ActivityManager am=(ActivityManager)此
.getSystemService(活动和服务);
列表l=am.getRecentTasks(1,
ActivityManager。最近的_(不包括_);
迭代器i=l.迭代器();
PackageManager pm=this.getPackageManager();
while(i.hasNext()){
试一试{
Intent-Intent=i.next().baseIntent;
List List=pm.QUERYINTENT活动(意图,
PackageManager.MATCH_(仅限默认值);
CharSequence c=pm.getApplicationLabel(pm.getApplicationInfo(
list.get(0).activityInfo.packageName,
PackageManager.GET_META_DATA));
Toast.makeText(此“应用程序名称:+c.toString()”,
Toast.LENGTH_LONG).show();
}捕获(例外e){
Toast.makeText(这个,
未找到应用程序名称:“+e.toString(),
Toast.LENGTH_LONG).show();
}
}
只需使用此代码
getActivity().getApplicationInfo().packageName
它提供应用程序信息,然后调用包名。使用可访问性服务
- 您可以使用AccessibilityService检测当前活动的窗口
- 在onAccessibilityEvent回调中,检查类型\窗口\状态\已更改的事件类型,以确定当前窗口何时更改
- 通过调用PackageManager.getActivityInfo()检查窗口是否为活动
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() {
}
}
您可以通过hey获得该活动,谢谢您的回复,但请让我知道,如果我在后台运行该活动,那么它会给出屏幕上当前显示的其他打开的应用程序名称?hey,谢谢。。你能建议这行需要哪个android用户权限吗?info.processName,PackageManager.GET_META_DATA);嘿,是的。。谢谢Vipul Shah。是的,我只是为了同样的目的使用android权限:嗨,我在ActivityManager.RunningAppProcessInfo=(ActivityManager.RunningAppProcessInfo)(I.next())获得ClassCastException;仅供参考,getRecentTasks不仅在棒棒糖(API 21)中被弃用,其功能也被切断。此答案更新了有关解决方法的信息:从API级别21开始,已弃用中的ActivityManager.getRececntTask!你的答案是正确的,请看以下内容: