【问题标题】:Getting resources of another Application获取另一个应用程序的资源
【发布时间】:2011-08-26 13:31:56
【问题描述】:

假设我有 2 个应用程序 A 和 B。

我想从 A 应用程序访问 B 应用程序的资源(绘图、图像、字符串)。我该怎么做?

编辑:

您还可以将 Android 项目指定为库项目,以便与依赖它的其他项目共享。 Android 项目一旦被指定为库项目,就无法安装到设备上。

这是否意味着我不能在 android 市场上使用我的库? 我的目标是使用应用程序 A 的默认资源,而且如果有人可以下载应用程序 B 并使用它的资源。

【问题讨论】:

  • 为什么这是个好主意?
  • 那不会让你的代码不可读吗?

标签: android android-resources


【解决方案1】:

如果您是这两个应用程序的开发人员,那么正确的方法是,正如其他人所说,创建一个 Android 库项目并在应用程序之间共享它。

尽管如此,您仍然可以从其他应用访问资源,即使这不是您的应用:

Resources res = context.getPackageManager().getResourcesForApplication("com.example.foo")

【讨论】:

【解决方案2】:

如果这两个应用程序都是您自己的,并且您想在构建时捆绑这些资源:

创建一个Android Library Project,将所有需要的资源放入其中并从您的两个应用程序中引用它。


编辑您的编辑: 您可以在 android 市场中使用该库。你不能单独使用它(编译它)。您必须构建一个使用该库的应用程序。当您构建该应用程序时,所有需要的内容基本上都会从库中获取并复制到您的 apk 中。您可以照常投放市场。

当您想要从在运行时下载到设备上的应用访问资源时,这不起作用。当您构建使用它的应用程序时,库项目会捆绑所有资源。在运行时访问时,Peter Knego 的响应是正确的。

【讨论】:

  • 谢谢,是的,我想在运行时使用它,我将使用 Peter Knego 方式。
【解决方案3】:

如果这两个应用程序都是您的,这是可能的。或者,您可以为这两个应用程序使用任何 Android 库。如果您愿意,您还可以为此类工作创建自己的Android Library。谢谢。

【讨论】:

    【解决方案4】:

    上面彼得的回答很棒,但我想详细说明一下......

    当您控制 appA 和 appB 并希望从 appB 中获取可绘制对象时,在 appA 中时,请执行以下操作:

    1. 在appB中获取drawable的标识符(例如R.drawable.iconInAppB
    2. 然后,在appA中

      Resources res = context.getPackageManager().getResourcesForApplication("com.example.appB");
      
          Drawable d = res.getDrawable(integer);
      //integer was what appB assigned to R.drawable.iconInAppB
      

    *注意:分配给R.drawable.iconInAppB 的整数id 会随着时间而改变,所以不要依赖硬编码。我将键值对 (String resourceName, int resourceId) 保存在 appB 的数据库中,并使用内容提供程序访问它们。

    【讨论】:

    • 请解释一下-1
    【解决方案5】:

    例如,让我们从包com.android.settings中获取ID为entryvalues_font_size的字符串数组

    String[] enries = null;
    try {
        // You can get PackageManager from the Context
        Resources res = getPackageManager().getResourcesForApplication("com.android.settings");
        int resId = res.getIdentifier("entryvalues_font_size", "array", "com.android.settings");
        if (resId != 0) {
            enries = res.getStringArray(resId);
        }
    }
    catch (NameNotFoundException e) {
        e.printStackTrace();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-18
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 2011-05-06
      • 2012-11-23
      相关资源
      最近更新 更多