2012-10-23 206 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

相關問題