为什么Intent.Action_VIEW不再适用于自Android 4.4以来选择的Uri?

时间:2014-11-13 11:50:50

标签: android android-intent

我有一个应用程序,允许添加超链接到设备上的内容。要选择和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

提前致谢。

0 个答案:

没有答案