Content Provider的临时权限访问(FLAG_GRANT_READ_URI_PERMISSION)
已实现了从App1访问App2的content provider(CP).
然后,App2为CP加上自定义权限后,App1只要有此权限也能访问.
<provider android:authorities="com.ck.contentprovider.MyContentProvider"
android:name="com.ck.contentprovider.MyContentProvider"
android:readPermission="android.permission.permRead"
android:writePermission="android.permission.permWrite"
android:grantUriPermissions="true">
</provider>
但intent中有个flag是FLAG_GRANT_READ_URI_PERMISSION, 据官方介绍可以把URI的临时访问权限传给receiver.所以我去掉App1中请求的权限android.permission.permRead,而让App2发个intent给App1,包括URI和此flag为“true”.
Intent sendIntent = new Intent();
sendIntent.setAction("android.intent.action.VIEW");
sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
sendIntent.putExtra("name", uri2.toString());
sendIntent.setType("text/plain");
但结果还是缺少权限,不能访问。(不论是explicit intent还是implicit intent)
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.web/com.android.web.Provid}: java.lang.SecurityException: Permission Denial: opening provider com.ck.contentprovider.MyContentProvider from ProcessRecord{426c6ea8 17032:com.android.web/u0a95} (pid=17032, uid=10095) requires android.permission.permRead or android.permission.permWrite
请哪位做过的大牛指点一下,万分感激!