在应用程序之间共享drawables
您有几种选择:
ContentProvider - 没有明确需要基于以上
SQLite
数据库。-
清单属性
android:sharedUserId
从文档:
,将与其他 应用程序共享一个Linux用户ID的名称。默认情况下,Android会为每个应用程序分配自己的 唯一用户标识。但是,如果对于两个或更多应用程序将此属性设置为相同的值 ,则它们将共享相同的ID - ,前提是它们也由相同的证书签名。 具有相同用户标识的应用程序可以访问彼此的数据,并且如果需要,可以在相同的过程中运行。
见http://developer.android.com/guide/topics/manifest/manifest-element.html#uid
-
PackageManager.getResourcesForApplication()检索与应用程序相关的资源。
用法:
PackageManager pm = getPackageManager(); try { Resources resources = pm.getResourcesForApplication("com.example.app"); int id = resources.getIdentifier("ic_launcher", "drawable", "com.example.app"); Drawable d = resources.getDrawable(id) } catch (NameNotFoundException e) { e.printStackTrace(); }
我认为ContentProvider是您的最佳选择。它们专门设计用于“在多个应用程序之间共享数据”。 下面是developer.android参考: http://developer.android.com/reference/android/content/ContentProvider.html 这里是一个详细的指南: http://www.vogella.com/articles/AndroidSQLite/article.html
我不会将图像存储在数据库中。插件将由第三方开发者提供,并且实现整个SQLite来存储图像将会是一个问题。我正在考虑传递资源ID和访问图像。 – hsz 2012-07-24 07:56:27
谢谢。如果插件定义了hdpi/mdpi/ldpi drawables呢?如果我将调用'getDrawable',它会为我提供有效的吗? – hsz 2012-07-24 08:52:54
是的,它给你一个有效的。通过调用'getResources()'来获取应用程序包的'Resources'实例,您将获得与您获得的'Resource'对象相同的资源。由于您无法访问插件apk的'R.java'常量定义,因此必须按名称获取资源。你也可以直接查看插件的'R.java',并使用常量'public static final int ic_launcher = 0x7f02001f;'作为id,但这有点棘手。 – biegleux 2012-07-24 09:10:09
我已经注册了'BroadcastReceiver'来获取关于已安装插件的信息,所以我也可以传递插件drawable的资源ID。好吧,我明白一切。非常感谢biegleux! – hsz 2012-07-24 09:14:11