【问题标题】:KitKat ACTION_OPEN_DOCUMENT does not show documents on Samsung devicesKitKat ACTION_OPEN_DOCUMENT 在三星设备上不显示文档
【发布时间】:2014-08-28 07:13:47
【问题描述】:

我正在使用此处指定的新 Kitkat 存储访问框架 (SAF): https://developer.android.com/guide/topics/providers/document-provider.html

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(intent, 0);

这与示例代码相同,但图像过滤器不起作用。 S5 或 Note3 上没有任何显示。视频 (video/*) 也是如此。我也尝试了不同的模式,比如 / 都没有用。

这看起来像是三星问题,应该由他们解决,我只是想知道是否有人知道解决方法。

【问题讨论】:

    标签: android android-4.4-kitkat samsung-touchwiz storage-access-framework


    【解决方案1】:

    我在三星 Galaxy S4 上遇到了同样的问题。在我的研究中,我发现 Galaxy s4 不支持媒体文档提供程序。通过查询媒体提供者接口解决了它。这就是我所做的:

    private void launchGallery()
    {
        final Intent intent = new Intent();
        // Api 19 and above should access the Storage Access Framework
        if ( isMediaProviderPresent())
            intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
        else
            intent.setAction(Intent.ACTION_GET_CONTENT);
        intent.setType("image/*");
        intent.addCategory(Intent.CATEGORY_OPENABLE);
    
        // Multi Picking is supported on api 18 and above.
        if (isApi18Above())
            intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
    
        startActivityForResult(Intent.createChooser(intent,"chooser"),
            RESULT_PHOTO_FROM_GALLERY);
    }
    
    
    private boolean isMediaProviderSupported()
    {
        if(isApi19Above())
        {
            final PackageManager pm = getActivity().getPackageManager();
            // Pick up provider with action string
            final Intent i = new Intent(DocumentsContract.PROVIDER_INTERFACE);
            final List<ResolveInfo> providers = pm.queryIntentContentProviders(i, 0);
            for (ResolveInfo info : providers)
            {
                if(info != null && info.providerInfo != null)
                {
                    final String authority = info.providerInfo.authority;
                    if(isMediaDocumentProvider(Uri.parse("content://"+authority)))
                        return true;
                }
            }
        }
        return false;
    }
    
      private static boolean isMediaDocumentProvider(final Uri uri)
        {
            return "com.android.providers.media.documents".equals(uri.getAuthority());
        }
    

    【讨论】:

    • 感谢您的回答。我认为“Intent.EXTRA_ALLOW_MULTIPLE”在使用旧操作时不起作用,是吗?
    • @frapim 它适用于 Google+ 照片,但不适用于其他客户端。
    • 另外,如果你喜欢这个答案,你可以点赞吗?
    • 如果可以的话,声望不够,抱歉。
    • 这有助于我在多张图片的情况下处理响应。 stackoverflow.com/a/24445002/1773155
    【解决方案2】:

    我在我的 Galaxy S4 上也有同样的问题,我发现的唯一解决方法是重用旧方法:

    Intent photoPickerIntent = new Intent();    
    photoPickerIntent.setAction(Intent.ACTION_GET_CONTENT);
    photoPickerIntent.setType("image/*");
    startActivityForResult(photoPickerIntent, 0);
    

    但我想您首先要确保使用特定设备,因为它可以与其他设备上的 Intent.ACTION_OPEN_DOCUMENT 很好地配合使用......(我在 Android 4.4.2 上尝试过 Wiko Cink Slim 和 Nexus 5 )。

    希望对你有帮助

    【讨论】:

    • 谢谢。这也是我现在正在采用的“解决方法”,但问题是旧方法无法进行多选。如果没有人提出更好的建议,我会将其标记为答案。
    猜你喜欢
    • 2015-09-21
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多