KitKat ACTION_OPEN_DOCUMENT不显示三星设备上的文档

时间:2014-07-07 17:57:09

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

我使用此处指定的新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上没有显示任何内容。视频(视频/ *)也是如此。我也尝试过像 / 这样的不同模式。

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

2 个答案:

答案 0 :(得分:8)

我在三星Galaxy s4上遇到了同样的问题。在我的研究中,我发现星系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());
    }

答案 1 :(得分:1)

我的Galaxy S4上也有同样的功能,我找到的唯一解决方法是重用旧方式:

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

但我想你首先要确保在特定的设备上,因为它与其他设备上的Intent.ACTION_OPEN_DOCUMENT一起运行良好...(我试过Wiko Cink Slim和Nexus 5,Android 4.4.2 )。

希望它可以帮到你