Android:活动名称字符串中的应用名称和图标

时间:2016-05-12 22:18:16

标签: android android-activity package android-package-managers

我的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));

但似乎意图形成不好,或指示错误。

如何获取请求的值?

3 个答案:

答案 0 :(得分:0)

  1. 存储其他包的活动名称是个坏主意。该应用程序 开发人员可能会发布一个不再具有的更新版本 具有该名称的活动。

  2. 您正在使用的Intent构造函数设置了操作 Intent。它目前没有包装。

  3. 我只存储目标应用的包名,并使用它来获取有关该应用的信息。

    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>