2017-09-04 4 views
0

Je veux implémenter le sélecteur de dossier dans android. J'ai implémenté le code ci-dessous pour ouvrir le sélecteur de fichier.comment obtenir le vrai chemin de uri donné dans android filechooser dropbox et google drive?

public static void showFileChooser(Activity activity, Fragment fragment) { 
     try { 

      File imageStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "example"); 
      if (!imageStorageDir.exists()) { 
       imageStorageDir.mkdirs(); 
      } 
      File file = new File(imageStorageDir + File.separator + "IMG_" + String.valueOf(System.currentTimeMillis()) + ".jpg"); 
      mCapturedImageURI = Uri.fromFile(file); // save to the private variable 

      final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI); 
      captureIntent.putExtra("capturedimageuri", mCapturedImageURI.toString()); 

      // Intent for Audio Recording 
      final Intent audioRecordIntent = new Intent(); 
      audioRecordIntent.setAction(IAdoddleConstants.ACTION_AUDIO_RECORD); 

      final Intent videoRecordIntent = new Intent(); 
      videoRecordIntent.setAction(IAdoddleConstants.ACTION_VIDEO_RECORD); 

      // Use the GET_CONTENT intent from the utility class 
      Intent target = com.asite.adoddle.filechooser.FileUtils.createGetContentIntent(); 
      // Create the chooser Intent 


      if (activity != null) { 
       Intent intent = Intent.createChooser(
         target, activity.getString(R.string.chooser_title)); 

       intent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { captureIntent,audioRecordIntent, videoRecordIntent}); 
       activity.startActivityForResult(intent, IMAGE_ANNOTATION_REQUEST_CODE); 
      } else { 
       Intent intent = Intent.createChooser(
         target, fragment.getString(R.string.chooser_title)); 

       intent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { captureIntent,audioRecordIntent, videoRecordIntent}); 
       fragment.startActivityForResult(intent, IMAGE_ANNOTATION_REQUEST_CODE); 
      } 

     } catch (ActivityNotFoundException e) { 
      AdoddleLog.e(DEBUG_TAG, "Error:" + e); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
      CommonUtilities.showToast(activity, activity.getString(R.string.error_message), Toast.LENGTH_LONG); 
     } 
    } 

Maintenant, il ouvre filechooser même comme ci-dessous.

enter image description here

Maintenant, quand je clique sur ce « Documents » Je reçois des applications différentes d'où je peux choisir les fichiers même comme ci-dessous.

enter image description here

Ici vous pouvez voir des applications telles que Google Drive et Dropbox. Maintenant, je veux sélectionner les fichiers de cette application. Maintenant, quand je sélectionne le fichier de la boîte de dépôt puis dans onActivityResult(int requestCode, int resultCode, Intent data) je reçois contenu: //com.dropbox.android.FileCache/filecache/2642b6eb-f9da-4775-b6c5-6cb4d6884018 uri de l'intention. Maintenant Comment obtenir le vrai chemin de cet uri? Je veux joindre ce fichier à mon activité. Aussi, je ne suis pas en mesure d'obtenir le vrai chemin du fichier de google drive.

+0

ne pas utiliser un chemin de fichier, utilisez 'InputStream' à la place - voir' ContentResolver' docs pour plus d'informations – pskink

+0

@pskink donc vous dire en utilisant InputStream I écrire ce fichier sur ma carte SD, puis utiliser le chemin de fichier de cette carte SD. –

+0

Pourquoi avez-vous besoin d'un chemin de fichier? ne pouvez-vous pas utiliser 'InputStream'? (ou 'ParcelFileDescriptor' /' FileDescriptor')? – pskink

Répondre

-1

Pour obtenir une image ou vidéo, utilisez Real Chemin:

protected String getPhotoUriRealPath(Uri contentURI) { 
    String path = ""; 
    if (contentURI == null) { 
     return path; 
    } 
    Cursor cursor = getContentResolver().query(contentURI, null, null, null, null); 

    if (cursor == null) { 
     path = contentURI.getPath(); 
    } else { 
     cursor.moveToFirst(); 
     int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
     path = cursor.getString(idx); 

    } 
    if (cursor != null) { 
     cursor.close(); 
    } 
    return path; 
} 

protected String getVideoUriRealPath(Uri contentURI) { 
    String path = ""; 
    if (contentURI == null) { 
     return path; 
    } 
    Cursor cursor = getContentResolver().query(contentURI, null, null, null, null); 

    if (cursor == null) { 
     path = contentURI.getPath(); 
    } else { 
     cursor.moveToFirst(); 
     int idx = cursor.getColumnIndex(MediaStore.Video.VideoColumns.DATA); 
     path = cursor.getString(idx); 

    } 
    if (cursor != null) { 
     cursor.close(); 
    } 
    return path; 
}