我设置了一个ContentProvider
,仅供我的应用程序内部使用,以使用流响应 URI,通过它我构造并提供一个 zip 文件。
将Uri
作为额外的 ( Intent.EXTRA_STREAM
) 传递给Intent
( Intent.ACTION_SEND
) 以便发送。但是,这样做时,它会间歇性地失败,并出现以下异常:
E/DatabaseUtils(26058): java.lang.SecurityException: Permission Denial: reading MyContentProvider uri content://spinner.myapp.db/file/stream/zip/1 from pid=26141, uid=10038 requires the provider be exported, or grantUriPermission()
我试过通过 授予权限intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
,但没有奏效。我也不明白为什么需要授予权限,因为只有我自己的应用程序才能访问ContentProvider
.
更新:
我现在也尝试使用setClipData()
,但没有更多成功。Gmail 显然忽略了 Uri,Dropbox 崩溃了。
String[] mimeTypes = { "application/x-compressed" };
ClipData clip = new ClipData("zip data", mimeTypes, new ClipData.Item(uri));
intent.setClipData(clip);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);