10

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

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

编辑:

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

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

4

5 回答 5

23

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

尽管如此,您仍然可以从另一个应用程序访问资源,即使这不是您的应用程序:

Resources res = context.getPackageManager().getResourcesForApplication("com.example.foo")
于 2011-08-26T14:04:30.477 回答
5

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

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


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

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

于 2011-08-26T13:42:00.770 回答
1

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

于 2011-08-26T13:51:14.133 回答
0

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

当您控制 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
    

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

于 2015-01-11T23:24:59.797 回答
0

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

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();
}
于 2017-05-08T15:02:13.720 回答