我的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 :(得分:0)
存储其他包的活动名称是个坏主意。该应用程序 开发人员可能会发布一个不再具有的更新版本 具有该名称的活动。
您正在使用的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
来执行此操作。
答案 1 :(得分:0)
单独的活动类名称不足以明确地识别它。您还需要具有该包的名称。然后,您可以创建ComponentName和开始此活动的意图
Intent intent = new Intent(action).setComponent(new ComponentName(pkg, cls));
使用相同的组件名称和包管理器getActivityInfo()
,您还可以访问ActivityInfo并获取活动本身的标签和图标。
但是在您的示例中,您使用Intent(String)构造函数来定义要启动的"com.companyname.app.ActivityName"
操作。
答案 2 :(得分: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>