【问题标题】:Android: app name and icon from activity name stringAndroid:活动名称字符串中的应用名称和图标
【发布时间】:2016-05-13 13:57:02
【问题描述】:

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

但似乎意图不是很好,或者说明是错误的。

如何获取请求的值?

【问题讨论】:

  • 为什么要使用 Intent 来包装包名?只需调用 getApplicationLabel() 将包名称作为字符串传递。

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


【解决方案1】:

仅活动类名称不足以明确识别它。您还需要为此提供包名称。然后你可以创建一个ComponentName 和一个启动这个活动的意图

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

使用相同的组件名称和包管理器的getActivityInfo(),您还可以访问ActivityInfo 并获取活动本身的标签和图标。

但在您的示例中,您使用Intent(String) 构造函数来定义要启动的"com.companyname.app.ActivityName" 操作。

【讨论】:

    【解决方案2】:
    1. 存储其他包的活动名称是个坏主意。该应用程序 开发人员可能会发布不再具有 使用该名称的活动。

    2. 您正在使用的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 来执行此操作。

    【讨论】:

      【解决方案3】:
      <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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-30
        • 2015-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-17
        相关资源
        最近更新 更多