Android 什么';安卓系统之间的区别是:权限=”;packagename.permissions.BROWSER“提供程序”;还有安卓:grantUriPermissions?
我很好奇,只是因为我试图访问的uri显示以下内容:Android 什么';安卓系统之间的区别是:权限=”;packagename.permissions.BROWSER“提供程序”;还有安卓:grantUriPermissions?,android,Android,我很好奇,只是因为我试图访问的uri显示以下内容: java.lang.SecurityException: Permission Denial: reading com.foo.MyProvider uri content://com.foo/history from pid=20735, uid=10080 requires com.foo.permissions.BROWSER_PROVIDER, or grantUriPermission() 但是,该应用程序中的提供商实际上有: &l
java.lang.SecurityException: Permission Denial: reading com.foo.MyProvider uri content://com.foo/history from pid=20735, uid=10080 requires com.foo.permissions.BROWSER_PROVIDER, or grantUriPermission()
但是,该应用程序中的提供商实际上有:
<provider android:name="com.foo.MyProvider"
android:authorities="com.foo.db.mydb"
android:permission="com.foo.permissions.BROWSER_PROVIDER">=
</provider>
那么收到的错误是:
java.lang.SecurityException: Permission Denial: reading org.mozilla.gecko.db.BrowserProvider uri content://org.mozilla.firefox.db.browser/history from pid=20735, uid=10080 requires org.mozilla.firefox.permissions.BROWSER_PROVIDER, or grantUriPermission()
但是,您会注意到权限是在提供程序中设置的:
<provider android:name="org.mozilla.gecko.db.BrowserProvider"
android:authorities="@ANDROID_PACKAGE_NAME@.db.browser"
android:permission="@ANDROID_PACKAGE_NAME@.permissions.BROWSER_PROVIDER">
...
...
所以我的问题是,为什么错误会说我需要那个许可证或授权许可证,当一个很明显存在的时候?如果你看这个,你会看到这个许可证的声明
<permission android:name="@ANDROID_PACKAGE_NAME@.permissions.BROWSER_PROVIDER"
android:protectionLevel="signature"/>
由于这是一个签名级别的权限,您不能持有此权限。只有使用与该应用相同的开发人员密钥签名的应用才可以
现在回到提供者,这里是它的完整声明:
<provider android:name="org.mozilla.gecko.db.BrowserProvider"
android:authorities="@ANDROID_PACKAGE_NAME@.db.browser"
android:permission="@ANDROID_PACKAGE_NAME@.permissions.BROWSER_PROVIDER">
<path-permission android:pathPrefix="/search_suggest_query"
android:readPermission="android.permission.GLOBAL_SEARCH" />
</provider>
在这里,它表示您需要org.mozilla.firefox.permissions.BROWSER\u PROVIDER
来直接访问该提供商,正如我上面指出的,您不能拥有。但是,在提供程序中是关键部分。这个元素的意思是,如果您持有android.permission.GLOBAL\u search权限,您可以访问以/search\u suggest\u query
开头的路径
由于您试图访问
/history
,因此出现安全异常。您不允许这样做。您可以发布清单的其余部分吗?如果你没有声明你的应用程序使用该权限,你将无法访问android:grantUriPermissions
主要用于一次性访问类型的场景。我被这个链接弄糊涂了。如果是你的提供商,那么你不需要android:grantUriPermissions,因为你只需授予自己所需的权限即可。如果是其他人的提供商,您需要使用他们的权限。或者,如果他们的android:grantUriPermissions
设置为true,您可以在Intent中请求权限。它不是我的供应商。请阅读更新后的问题,这完全回答了我的问题。现在,让我们假设提供商的所有者希望允许我的应用程序访问提供商——并且只有我的应用程序——这可能吗?我不确定如何(或者是否)可能。你可能想为此提出一个新问题。同样。我会那样做的。
<provider android:name="org.mozilla.gecko.db.BrowserProvider"
android:authorities="@ANDROID_PACKAGE_NAME@.db.browser"
android:permission="@ANDROID_PACKAGE_NAME@.permissions.BROWSER_PROVIDER">
<path-permission android:pathPrefix="/search_suggest_query"
android:readPermission="android.permission.GLOBAL_SEARCH" />
</provider>