2016-02-16 3 views
0

Voici mon code i sélectionner le fichier xls et obtenir une réponse comme ça dans onActivityResult Vous voulez obtenir le chemin complet du document

content://com.android.providers.downloads.documents/document/771 

je veux obtenir le chemin complet du document. Aidez-moi, s'il vous plaît.

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

Et onActivityResult

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    // TODO Auto-generated method stub 
    super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode == Activity.RESULT_OK) 
    {   
     if (requestCode == 1) 
     { 
      Uri currentUri = data.getData(); 
      Log.d("path", currentUri.toString()); 
     } 
    } 
} 
+0

Cochez ici [Comment obtenir le chemin de fichier complet depuis l'URI] (http://stackoverflow.com/questions/13209494/how-to-get-the-full-file-path-from-uri) – Strider

+0

'i sélectionnez le fichier xls'. Vous n'avez pas indiqué quel sélecteur de fichier vous avez utilisé. Ni d'où vient le fichier. Y a-t-il un chemin absolu? Le savez-vous? Dis alors! – greenapps

Répondre

0

Espérons que cela vous aidera!

import android.content.ContentUris; 
      import android.content.Context; 
      import android.database.Cursor; 
      import android.net.Uri; 
      import android.os.Build; 
      import android.os.Environment; 
      import android.provider.DocumentsContract; 
      import android.provider.MediaStore; 

      public class ImageFilePath { 

       /** 
       * Method for return file path of Gallery image 
       * 
       * @param context 
       * @param uri 
       * @return path of the selected image file from gallery 
       */ 
       public static String getPath(final Context context, final Uri uri) { 

        // check here to KITKAT or new version 
        final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; 

        // DocumentProvider 
        if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) { 

         // ExternalStorageProvider 
         if (isExternalStorageDocument(uri)) { 
          final String docId = DocumentsContract.getDocumentId(uri); 
          final String[] split = docId.split(":"); 
          final String type = split[0]; 

          if ("primary".equalsIgnoreCase(type)) { 
           return Environment.getExternalStorageDirectory() + "/" 
             + split[1]; 
          } 
         } 
         // DownloadsProvider 
         else if (isDownloadsDocument(uri)) { 

          final String id = DocumentsContract.getDocumentId(uri); 
          final Uri contentUri = ContentUris.withAppendedId(
            Uri.parse("content://downloads/public_downloads"), 
            Long.valueOf(id)); 

          return getDataColumn(context, contentUri, null, null); 
         } 
         // MediaProvider 
         else if (isMediaDocument(uri)) { 
          final String docId = DocumentsContract.getDocumentId(uri); 
          final String[] split = docId.split(":"); 
          final String type = split[0]; 

          Uri contentUri = null; 
          if ("image".equals(type)) { 
           contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 
          } else if ("video".equals(type)) { 
           contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; 
          } else if ("audio".equals(type)) { 
           contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
          } 

          final String selection = "_id=?"; 
          final String[] selectionArgs = new String[] { split[1] }; 

          return getDataColumn(context, contentUri, selection, 
            selectionArgs); 
         } 
        } 
        // MediaStore (and general) 
        else if ("content".equalsIgnoreCase(uri.getScheme())) { 

         // Return the remote address 
         if (isGooglePhotosUri(uri)) 
          return uri.getLastPathSegment(); 

         return getDataColumn(context, uri, null, null); 
        } 
        // File 
        else if ("file".equalsIgnoreCase(uri.getScheme())) { 
         return uri.getPath(); 
        } 

        return null; 
       } 

       /** 
       * Get the value of the data column for this Uri. This is useful for 
       * MediaStore Uris, and other file-based ContentProviders. 
       * 
       * @param context 
       *   The context. 
       * @param uri 
       *   The Uri to query. 
       * @param selection 
       *   (Optional) Filter used in the query. 
       * @param selectionArgs 
       *   (Optional) Selection arguments used in the query. 
       * @return The value of the _data column, which is typically a file path. 
       */ 
       public static String getDataColumn(Context context, Uri uri, 
         String selection, String[] selectionArgs) { 

        Cursor cursor = null; 
        final String column = "_data"; 
        final String[] projection = { column }; 

        try { 
         cursor = context.getContentResolver().query(uri, projection, 
           selection, selectionArgs, null); 
         if (cursor != null && cursor.moveToFirst()) { 
          final int index = cursor.getColumnIndexOrThrow(column); 
          return cursor.getString(index); 
         } 
        } finally { 
         if (cursor != null) 
          cursor.close(); 
        } 
        return null; 
       } 

       /** 
       * @param uri 
       *   The Uri to check. 
       * @return Whether the Uri authority is ExternalStorageProvider. 
       */ 
       public static boolean isExternalStorageDocument(Uri uri) { 
        return "com.android.externalstorage.documents".equals(uri 
          .getAuthority()); 
       } 

       /** 
       * @param uri 
       *   The Uri to check. 
       * @return Whether the Uri authority is DownloadsProvider. 
       */ 
       public static boolean isDownloadsDocument(Uri uri) { 
        return "com.android.providers.downloads.documents".equals(uri 
          .getAuthority()); 
       } 

       /** 
       * @param uri 
       *   The Uri to check. 
       * @return Whether the Uri authority is MediaProvider. 
       */ 
       public static boolean isMediaDocument(Uri uri) { 
        return "com.android.providers.media.documents".equals(uri 
          .getAuthority()); 
       } 

       /** 
       * @param uri 
       *   The Uri to check. 
       * @return Whether the Uri authority is Google Photos. 
       */ 
       public static boolean isGooglePhotosUri(Uri uri) { 
        return "com.google.android.apps.photos.content".equals(uri 
          .getAuthority()); 
       } 
      } 


       onActivityResult you have to write 

       @Override 
       public void onActivityResult(int requestCode, int resultCode, Intent data) { 

        super.onActivityResult(requestCode, resultCode, data); 
        if (resultCode == Activity.RESULT_OK) { 
         if (requestCode == SELECT_PHOTO) { 
          if (null == data) 
           return; 


          Uri selectedImageUri = data.getData(); 
          System.out.println(selectedImageUri.toString()); 
          // MEDIA GALLERY 
          selectedImagePath = ImageFilePath.getPath(
            getActivity(), selectedImageUri); 
          Log.i("Image File Path", "" + selectedImagePath); 
          System.out.println("Image Path ="+selectedImagePath); 
          if(selectedImagePath!=null&&!selectedImagePath.equals("")) 
          { 
           uploadImageOnServer upImg = new uploadImageOnServer(); 
           upImg.execute(); 
          } 
          else 
          { 
           AlertDialogManager alDailog = new AlertDialogManager(getActivity(), "Image Upload", "Please Select Valid Image", 0); 
           alDailog.showDialog(); 
          } 



         } 
        } 

       } 
1

Vous ne serez pas en mesure de trouver un chemin absolu si vous utilisez Intent.ACTION_OPEN_DOCUMENT.

Si vous avez besoin de lire le fichier, puis ouvrez un flux avec l'URL reçu.