我有一个应用程序,允许添加超链接到设备上的内容。要选择和URI我这样做:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
if (Build.VERSION.SDK_INT >= 11)
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(Intent.createChooser(intent, getString("hyperlink")), ACTIVITY_RESULT_SELECT_URI_LINK);
}
在onActivityResult中,我将返回的Uri存储起来:
uri = Uri.parse(data.getDataString());
if (Build.VERSION.SDK_INT >= 19) {
final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
getContentResolver().takePersistableUriPermission(uri, takeFlags);
}
当用户从我的应用程序内部调用链接时,我基本上会这样做:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
intent = Intent.createChooser(intent, context.getResources().getString("open"));
if (intent != null)
context.startActivity(intent);
直到android 4.4这一切都运行良好。但是,由于android 4.4这不再有效。我已阅读有关新的DocumentProviders和权限:https://developer.android.com/guide/topics/providers/document-provider.html#permissions 正如你在上面所看到的,我确实试图保留权限,但是没有Uri会像这样打开。在Galery中打开图像我得到一个空屏幕,在LogCat中我看到
W/SurfaceFlinger(122): couldn't log to binary event log: overflow.
对于视频,我得到的内容(翻译)无法播放此视频。
如上所述,这一直都在Android 4.4之前工作。
我尝试过使用ACTION_OPEN_DOCUMENT而不是ACTION_GET_CONTENT:
intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("*/*");
// intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
intent.addCategory(Intent.CATEGORY_OPENABLE);
但这并没有什么不同。知道如何让这个工作: 选择Uri到设备上的任何东西,稍后再打开它?
类似但不完全相同: New KitKat URIs dont respond to Intent.ACTION_VIEW
提前致谢。