5

sto usando la nuova Kitkat bagagli Accesso Framework (SAF), come specificato qui: https://developer.android.com/guide/topics/providers/document-provider.htmlKitKat ACTION_OPEN_DOCUMENT non mostra i documenti su dispositivi Samsung

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

Questo è lo stesso come il codice di esempio, ma il filtro immagini non funziona. Nulla si presenta sull'S5 o sul Note3. Lo stesso accade per il video (video/*). Ho anche provato diversi modelli come / non disponibili.

Questo sembra un problema Samsung che dovrebbe essere affrontato da loro, mi chiedo solo se qualcuno conosce una soluzione alternativa.

risposta

1

Ho avuto lo stesso sul mio Galaxy S4, e l'unica soluzione che ho trovato è stato quello di riutilizzare il vecchio modo:

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

ma suppongo che si desidera prima di essere sicuri di essere sul dispositivo specifico, dal momento che funziona bene con Intent.ACTION_OPEN_DOCUMENT su altri dispositivi ... (Ho provato su Wiko Cink Slim e Nexus 5, con Android 4.4.2).

Spero che ti aiuta

+0

Grazie per quello. Questa è anche la "soluzione alternativa" a cui sto lavorando in questo momento, ma il problema è che la selezione multipla non è possibile con la vecchia maniera. Segnalo come la risposta se nessuno fa qualcosa di meglio. – frapim

8

stavo affrontando lo stesso problema sul Samsung Galaxy S4. Durante la mia ricerca ho capito che la galassia s4 non supportava il fornitore di documenti multimediali. Risolto interrogando l'interfaccia del fornitore di media. Questo è quello che ho fatto:

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

Grazie per la risposta. Non penso che "Intent.EXTRA_ALLOW_MULTIPLE" funzioni quando si utilizza la vecchia azione, vero? – frapim

+1

@frapim Funziona su foto Google+, ma non su altri client. – AjayV

+0

Inoltre, se ti piace questa risposta puoi per favore passare in rassegna? – AjayV