0

我的Android應用程序存儲稍後將啓動的一些外部應用程序的活動名稱。Android:應用程序名稱和圖標來自活動名稱字符串

例:「com.companyname.app.ActivityName」

該應用程序的名稱和圖標必須從剛剛此字符串檢索。

我使用這種代碼:

intent=new Intent("com.companyname.app.ActivityName"); 
label=packageManager.getApplicationLabel(packageManager.getApplicationInfo(intent.getPackage(),0)).toString(); 
icon=packageManager.getApplicationIcon(packageManager.getApplicationInfo(intent.getPackage(),0)); 

但似乎意圖沒有很好地形成,或者指令是錯誤的。

如何獲取所需的值?

+0

爲什麼使用Intent來封裝包名?只需調用'getApplicationLabel()'將包名稱作爲String傳遞即可。 – adelphus

回答

0

活動類名稱本身並不足以明確識別它。您還需要擁有該軟件包的名稱。然後,你可以創建一個ComponentName和意圖開始這個活動

Intent intent = new Intent(action).setComponent(new ComponentName(pkg, cls)); 

在相同的組件名稱和包管理器的getActivityInfo()你也可以訪問ActivityInfo並獲得活動本身的標籤和圖標。

但在您的示例中,您正在使用Intent(String)構造函數來定義"com.companyname.app.ActivityName"要開始的操作。

0
  1. 存儲其他包的活動名稱是一個壞主意。應用程序 開發人員可能會發布更新後的版本,該版本不再具有該名稱的 活動。

  2. Intent構造您所使用套行動 Intent。目前它沒有包裝。

我只會存儲目標應用程序的包名,並使用它來獲取有關該應用程序的信息。

String packageName = ...; 
try { 
    String label = packageManager.getApplicationLabel(packageName); 
    Drawable icon = packageManager.getApplicationIcon(packageName); 
    // etc. 
} catch (NameNotFoundException e) { 
    Log.e(TAG, "Couldn't get info for package " + packageName); 
} 

如果再需要啓動該應用程序,使用packageManager.getLaunchIntentForPackage(...)得到一個Intent這樣做。

0
<activity 
    android:name=".ui.HomeActivity" 
    android:label="@string/title_home_activity" 
    android:icon="@drawable/icon"> 
    <intent-filter android:label="@string/app_name"> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity>