Android 在应用程序之间共享可提取数据

Android 在应用程序之间共享可提取数据,android,android-resources,Android,Android Resources,我已经在我的应用程序中实现了插件系统。插件作为独立应用程序存在 从主应用程序中的插件访问drawables的最佳方式是什么?我认为ContentProvider是您的最佳选择。它们专门设计用于“在多个应用程序之间共享数据”。 以下是developer.android的参考资料: 以下是详细的指南: 我认为ContentProvider是您最好的选择。它们专门设计用于“在多个应用程序之间共享数据”。 以下是developer.android的参考资料: 以下是详细的指南: 您几乎没有选择: -不

我已经在我的应用程序中实现了插件系统。插件作为独立应用程序存在


从主应用程序中的插件访问drawables的最佳方式是什么?

我认为ContentProvider是您的最佳选择。它们专门设计用于“在多个应用程序之间共享数据”。 以下是developer.android的参考资料: 以下是详细的指南:
我认为ContentProvider是您最好的选择。它们专门设计用于“在多个应用程序之间共享数据”。 以下是developer.android的参考资料: 以下是详细的指南:

您几乎没有选择:

  • -不一定需要基于
    SQLite
    数据库

  • 清单属性
    android:sharedUserId

    从文档:

    将与其他用户共享的Linux用户ID的名称 应用。默认情况下,Android为每个应用程序分配自己的应用程序 唯一的用户ID。但是,如果此属性设置为相同的值 对于两个或多个应用程序,它们将共享相同的ID- 前提是它们也由同一证书签署。 具有相同用户ID的应用程序可以访问彼此的数据,如果 需要时,在同一进程中运行

  • 检索与应用程序关联的资源

    用法:

您几乎没有选择:

  • -不一定需要基于
    SQLite
    数据库

  • 清单属性
    android:sharedUserId

    从文档:

    将与其他用户共享的Linux用户ID的名称 应用。默认情况下,Android为每个应用程序分配自己的应用程序 唯一的用户ID。但是,如果此属性设置为相同的值 对于两个或多个应用程序,它们将共享相同的ID- 前提是它们也由同一证书签署。 具有相同用户ID的应用程序可以访问彼此的数据,如果 需要时,在同一进程中运行

  • 检索与应用程序关联的资源

    用法:


我不想在数据库中存储图像。插件将由第三方开发人员提供,实现整个SQLite只存储图像将是一个问题。我正在考虑传递资源id并使用它访问图像。我不想在数据库中存储图像。插件将由第三方开发人员提供,实现整个SQLite只存储图像将是一个问题。我正在考虑传递资源id并使用它访问图像。谢谢。如果插件定义了hdpi/mdpi/ldpi可绘制文件,该怎么办?如果我调用
getDrawable
,它会提供有效的吗?是的,它会提供有效的。通过调用
getResources()
为应用程序包检索
Resources
实例,您将获得相同的
Resource
对象。由于您无法访问插件apk的
R.java
常量定义,因此您必须按名称获取资源。您还可以直接查看插件的
R.java
,并使用常量
public static final int ic_launcher=0x7f02001f
作为id,但这有点棘手。我已经注册了
BroadcastReceiver
,以获取有关已安装插件的信息,因此我还可以传递插件可绘制文件的资源id。好的,我什么都懂。非常感谢你,比格勒!如果您对获取高分辨率的可绘制图像感兴趣,请尝试以下代码:
resources.getDrawableForDensity(id,DisplayMetrics.DENSITY_XHIGH)
getDrawable将只返回与设备的DisplayMetrics相匹配的可绘制图像,更低或来自常规可绘制文件夹谢谢。如果插件定义了hdpi/mdpi/ldpi可绘制文件,该怎么办?如果我调用
getDrawable
,它会提供有效的吗?是的,它会提供有效的。通过调用
getResources()
为应用程序包检索
Resources
实例,您将获得相同的
Resource
对象。由于您无法访问插件apk的
R.java
常量定义,因此您必须按名称获取资源。您还可以直接查看插件的
R.java
,并使用常量
public static final int ic_launcher=0x7f02001f
作为id,但这有点棘手。我已经注册了
BroadcastReceiver
,以获取有关已安装插件的信息,因此我还可以传递插件可绘制文件的资源id。好的,我什么都懂。非常感谢你,比格勒!如果您对获取高分辨率可绘制文件感兴趣,请尝试以下代码:
resources.getDrawableForDensity(id,DisplayMetrics.DENSITY\u XHIGH)
getDrawable将只返回与设备的DisplayMetrics相匹配的可绘制文件,更低或来自常规可绘制文件夹
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();
}