我有一个日记应用,允许用户将照片附加到相机或存储中的条目。该应用程序以 content:// Uri字符串的形式存储对数据库中图像文件的引用。这看似可靠。
现在我想创建一个更基本的应用程序的免费版本,但是如果用户选择升级,我需要包含一种将数据导入更高级应用程序的机制。这可以通过导出的ContentProvider轻松完成,但是尝试从内容Uris读取会导致SecurityException,因为它是一个不同的应用程序。
是否可以请求对已知Uri的持久读取权限?我知道如何在takePersistableUriPermission
Intent返回的Uri上使用ACTION_OPEN_DOCUMENT
,但是我没有办法用特定的Uri做到这一点。
sharedUserId
,以便共享其权限。在这种情况下,这是不可能的,因为现有用户将无法升级。content://
Uris转换为file://
Uris,并在接收应用中创建新内容Uri。当然,对于所有内容Uris来说这是不可能的,但它总比没有好。答案 0 :(得分:1)
对我的问题的简短回答似乎是否定的。
据我所知,从文档中可以看出,内容提供商必须为ACTION_OPEN_DOCUMENT
Intent返回的数据使用takePersistableUriPermission
提供可持久的Uri权限。似乎没有办法请求访问特定Uri的权限。
为了解决这个问题,我决定将内容Uris视为易失性,并将数据复制到外部存储上公共应用专用目录中的文件中。然后我只存储文件名并在需要时重建完整路径。这使得数据库与文件结构无关,数据更具可移植性。缺点是它会复制数据并占用更多存储空间。
答案 1 :(得分:0)
我认为你必须实施第一名 您可以使用“flavors”Gradle执行多个版本: 这没什么复杂的: 建立一个支付的味道(全部为白色)。 建立一个自由的味道(较小)。
productFlavors {
paid {
applicationId = "com.vogella.android.gradlebuildflavors.paid"
versionName = "1.0-paid"
}
free {
applicationId = "com.vogella.android.gradlebuildflavors.free"
versionName = "1.0-free"
}
}
教程: