2012-10-23 150 views
14

我需要发射活动的名称来自我的应用程序启动活动的启动活动名称。 任何解决方案获取Android应用程序

+0

组件名称名称=新的组件名称(包,launcheractivity); \t \t \t \t Intent i = new Intent(Intent.ACTION_MAIN); i.addCategory(Intent.CATEGORY_LAUNCHER); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK \t | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); i.setComponent(name); _context.startActivity(ⅰ); 在这里,我想为组件名称的活动性名称.. – user1767260

+0

任何特定的应用程序或所有安装的应用程序的启动活动? –

+0

安装的应用程序启动器活动 – user1767260

回答

20

使用下面的代码来获取所有包的发射活动:

 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); 


     } 
+0

感谢它为我工作 –

44

晚,但更好的办法,将给出确切意图发动活动

PackageManager pm = getPackageManager(); 
Intent intent=pm.getLaunchIntentForPackage(pacakgeName); 
startActivity(intent); 
8

即使虽然上面的答案直接回答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); 
} 

我在这里不仅可以得到应用的发射活动,也正在清理活动的所有返回堆栈(这是我真正需要我的时候触发发射活动)。例如,如果身份验证令牌已过期,我会调用它。

重要的是要使用IntentCompat,否则一个有诉诸Intent标志Intent.FLAG_ACTIVITY_CLEAR_TASK,这是只有在API推出11

相关问题