获取android应用程序的启动器活动名称
我需要获取启动器活动的名称才能从我的应用程序中启动该活动。获取android应用程序的启动器活动名称,android,android-activity,Android,Android Activity,我需要获取启动器活动的名称才能从我的应用程序中启动该活动。 任何解决方案使用以下代码获取所有包的启动器活动: final PackageManager pm = getPackageManager(); Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); List&l
任何解决方案使用以下代码获取所有包的启动器活动:
final PackageManager pm = getPackageManager();
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> appList = pm.queryIntentActivities(mainIntent, 0);
Collections.sort(appList, new ResolveInfo.DisplayNameComparator(pm));
for (ResolveInfo temp : appList) {
Log.v("my logs", "package and activity name = "
+ temp.activityInfo.packageName + " "
+ temp.activityInfo.name);
}
final PackageManager pm=getPackageManager();
意图maintent=新意图(Intent.ACTION\u MAIN,空);
mainIntent.addCategory(Intent.CATEGORY_启动器);
List appList=pm.querytentActivities(maintent,0);
Collections.sort(appList,newresolveinfo.DisplayNameComparator(pm));
用于(ResolveInfo临时:应用程序列表){
Log.v(“我的日志”,“包和活动名称=”
+temp.activityInfo.packageName+“”
+临时活动信息(名称);
}
虽然晚了,但更好的方法是它能给出启动活动的确切意图
PackageManager pm = getPackageManager();
Intent intent=pm.getLaunchIntentForPackage(pacakgeName);
startActivity(intent);
尽管上面的答案直接回答了OP的问题,但我想加上我的两分钱:
/** Backwards compatible method that will clear all activities in the stack. */
public void startLauncherActivity(Context context) {
PackageManager packageManager = context.getPackageManager();
Intent intent = packageManager.getLaunchIntentForPackage(context.getPackageName());
ComponentName componentName = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(componentName);
context.startActivity(mainIntent);
}
在这里,我不仅获得了应用程序的启动程序活动,而且还清除了所有活动的backbackback(这是我触发启动程序活动时实际需要的)。例如,我将其称为过期的身份验证令牌
重要的是要使用
IntentCompat
,否则必须使用Intent
标志,该标志仅在API 11中引入。这是您可以使用的最简单的解决方案。而且它工作得很好`
private String getLauncherActivityName(){
String activityName = "";
final PackageManager pm = getPackageManager();
Intent intent = pm.getLaunchIntentForPackage(getPackageName());
List<ResolveInfo> activityList = pm.queryIntentActivities(intent,0);
if(activityList != null){
activityName = activityList.get(0).activityInfo.name;
}
return activityName;
}
私有字符串getLauncherActivityName(){
字符串activityName=“”;
最终PackageManager pm=getPackageManager();
Intent-Intent=pm.getLaunchIntentForPackage(getPackageName());
List activityList=pm.querytentActivities(intent,0);
如果(activityList!=null){
activityName=activityList.get(0).activityInfo.name;
}
返回activityName;
}
ComponentName=新组件名称(包、启动器活动);意向i=新意向(意向.行动\主要);i、 addCategory(意图.类别\发射器);i、 setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_,如果需要);i、 设置组件(名称)_背景。起始触觉(i);这里我想要ComponentName的launcheractivity的名称..看一下,它列出了所有已安装应用程序所需的信息。任何特定应用程序或所有已安装应用程序的启动程序活动?已安装应用程序的启动程序活动如果您输入了软件包名称,那么为什么不直接尝试我的代码。您的2美分非常有用:)Google已删除了方法IntentCompat.makeRestartActivityTask()
,使用Intent.makeRestartActivityTask()
insteadAddIntent
flagIntent.flag\u ACTIVITY\u CLEAR\u TASK
清除后台堆栈。