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>