Android:来自 activity 名称字符串的应用程序名称和图标
Android: app name and icon from activity name string
我的 Android 应用程序存储一些 activity 外部应用程序的名称,稍后将启动。
示例:"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));
但似乎意图不正确,或者说明有误。
如何获取请求的值?
存储其他软件包的 activity 名称是个坏主意。该应用程序
开发人员可能会发布一个更新版本,该版本不再具有
Activity 用那个名字。
您正在使用的 Intent
构造函数设置了 action
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
来执行此操作。
activity class 名称本身不足以明确识别它。您还需要知道它的包名。然后你可以创建一个 ComponentName 和一个开始这个 activity
的意图
Intent intent = new Intent(action).setComponent(new ComponentName(pkg, cls));
使用相同的组件名称和包管理器的 getActivityInfo()
you could also access the ActivityInfo 并获取 activity 本身的标签和图标。
但在您的示例中,您使用 Intent(String) 构造函数来定义要启动的 "com.companyname.app.ActivityName"
操作。
<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>
我的 Android 应用程序存储一些 activity 外部应用程序的名称,稍后将启动。
示例:"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));
但似乎意图不正确,或者说明有误。
如何获取请求的值?
存储其他软件包的 activity 名称是个坏主意。该应用程序 开发人员可能会发布一个更新版本,该版本不再具有 Activity 用那个名字。
您正在使用的
Intent
构造函数设置了 actionIntent
。目前没有包。
我只会存储目标应用程序的包名称,并使用它来获取有关该应用程序的信息。
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
来执行此操作。
activity class 名称本身不足以明确识别它。您还需要知道它的包名。然后你可以创建一个 ComponentName 和一个开始这个 activity
的意图Intent intent = new Intent(action).setComponent(new ComponentName(pkg, cls));
使用相同的组件名称和包管理器的 getActivityInfo()
you could also access the ActivityInfo 并获取 activity 本身的标签和图标。
但在您的示例中,您使用 Intent(String) 构造函数来定义要启动的 "com.companyname.app.ActivityName"
操作。
<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>