5

Je suis en utilisant comme spécifié ici le nouveau cadre KitKat d'accès au stockage (SAF): https://developer.android.com/guide/topics/providers/document-provider.htmlKitKat ACTION_OPEN_DOCUMENT ne contient pas les documents sur les appareils Samsung

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

C'est le même que l'exemple de code, mais le filtre d'images ne fonctionne pas. Rien n'apparaît sur le S5 ou le Note3. La même chose se passe pour la vidéo (vidéo/*). J'ai également essayé différents modèles comme / pour ne pas profiter. Cela ressemble à un problème de Samsung qui devrait être abordé par eux, je me demandais si quelqu'un sait une solution de contournement.

Répondre

1

J'ai eu la même chose sur mon Galaxy S4, et la seule solution que j'ai trouvé de réutiliser l'ancienne:

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

Mais je suppose que vous voulez d'abord être sûr d'être sur le dispositif spécifique, étant donné que ça marche bien avec l'Intent.ACTION_OPEN_DOCUMENT sur d'autres appareils ... (j'ai essayé sur Wiko Cink Slim et Nexus 5, avec Android 4.4.2).

espérons qu'il vous aidera

+0

Merci pour cela. C'est aussi la «solution de contournement» que j'utilise actuellement, mais le problème est que la multi-sélection n'est pas possible avec l'ancienne méthode. Je vais marquer cela comme la réponse si personne ne trouve quelque chose de mieux. – frapim

8

je faisais face à la même question sur Samsung Galaxy s4. Au cours de mes recherches, j'ai compris que la galaxie s4 ne soutenait pas le fournisseur de documents médias. Résolu en interrogeant l'interface du fournisseur de médias. C'est ce que j'ai fait:

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()); 
    } 
+0

Merci pour la réponse. Je ne pense pas que "Intent.EXTRA_ALLOW_MULTIPLE" fonctionne lorsque vous utilisez l'ancienne action, n'est-ce pas? – frapim

+1

@frapim Fonctionne sur les photos Google+, mais pas sur les autres clients. – AjayV

+0

Aussi, si vous aimez cette réponse, pouvez-vous s'il vous plaît upvote? – AjayV

Questions connexes