Séb*_*ien 6 android android-contentprovider android-permissions
这是我试图了解Android Content Provider权限的测试:
App ProviderApp清单:
<provider
android:authorities="com.mycompany.myProviderApp"
android:name="com.mycompany.myProviderApp.ContentProviderForMyOtherApps"
android:exported="true"/>
Run Code Online (Sandbox Code Playgroud)
我还使用在ProviderApp中返回字符串的基本方法实现了一个dummy ContentProvider(ContentProviderForMyOtherApps):query
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
String[] cols = {"column1"};
MatrixCursor cursor = new MatrixCursor(cols);
MatrixCursor.RowBuilder builder = cursor.newRow();
builder.add("HELLO!");
return cursor;
}
Run Code Online (Sandbox Code Playgroud)
App ClientApp代码:
Cursor cursor = getContentResolver().query(Uri.parse("content://com.mycompany.myProviderApp"),null,null,null,null);
cursor.moveToFirst();
Log.d(TAG, cursor.getString(0)); // output: HELLO!
Run Code Online (Sandbox Code Playgroud)
好的,所以一切正常,ClientApp成功访问提供程序.
但根据以下摘录,我对文档的理解是ClientApp应该被拒绝访问提供者,因为:
android:readPermission内provider(如com.mycompany.myProviderApp.READ)uses-permission(例如com.mycompany.myProviderApp.READ)文档摘录:
如果提供者的应用程序未指定任何权限,则其他应用程序无权访问提供者的数据.
https://developer.android.com/guide/topics/providers/content-provider-basics.html#Permissions
机器人:出口
内容提供程序是否可供其他应用程序使用:true:提供程序可供其他应用程序使用.任何应用程序都可以使用提供程序的内容URI来访问它,具体取决于为提供程序指定的权限.
https://developer.android.com/guide/topics/manifest/provider-element.html
为什么这段代码(提供者和客户端声明NO权限)实际上有效?
(文档中我错过了什么?)
Com*_*are 10
文档有一个错误.这个:
如果提供者的应用程序未指定任何权限,则其他应用程序无权访问提供者的数据.
应该读作:
如果提供者的应用程序未指定任何权限,则其他应用程序对提供者数据的访问仅由
android:exported值(true授予对所有应用程序的无限访问权限;false阻止其他应用程序访问)和android:grantUriPermissions值(变得复杂)决定.
恕我直言,整个部分需要重写.但是,就您的测试而言,一个导出的无权限提供程序是开放的,任何应用程序都可以读取和写入而不受惩罚.
| 归档时间: |
|
| 查看次数: |
1256 次 |
| 最近记录: |