2014-06-20 26 views
12

Wprowadzam zamiar wyboru dokumentów przy użyciu następującego kodu.Android - Jak uzyskać nazwę wybranego pliku z dokumentu

private void showFileChooser() { 
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
    intent.setType("*/*"); 
    intent.addCategory(Intent.CATEGORY_OPENABLE); 

    try { 
     startActivityForResult(
       Intent.createChooser(intent, "Select a File to Upload"), 1); 
    } catch (android.content.ActivityNotFoundException ex) { 
     // Potentially direct the user to the Market with a Dialog 
     Toast.makeText(this, "Please install a File Manager.", 
       Toast.LENGTH_SHORT).show(); 
    } 
} 

W onActivity Wynika gdy próbuję uzyskać ścieżkę pliku to daje jakiś inny numer w miejscu nazwy pliku.

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (requestCode) { 
    case 1: 
     if (resultCode == RESULT_OK) { 
      // Get the Uri of the selected file 
      Uri uri = data.getData(); 
      File myFile = new File(uri.toString()); 
      String path = myFile.getAbsolutePath(); 
     } 
     break; 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 

Ta wartość ścieżki uzyskujemy w ten sposób. "treść: //com.android.providers.downloads.documents/document/1433" Ale chcę prawdziwą nazwę pliku jak doc1.pdf itp .. Jak go zdobyć?

+1

Co otrzymasz jeśli używasz myFile.getName()? – Opiatefuchs

Odpowiedz

-1

Możesz spróbować tego, m Mam nadzieję, że to pomoże u:

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     Log.i("inside", "onActivityResult"); 
     if(requestCode == FILE_MANAGER_REQUEST_CODE) 
     { 
      // Check if the user actually selected an image: 
      if(resultCode == Activity.RESULT_OK) 
      { 
       // This gets the URI of the image the user selected: 
       Uri selectedFileURI = data.getData(); 
       File file = new File(getRealPathFromURI(selectedFileURI)); 



       // Create a new Intent to send to the next Activity: 
      } 
     } 
    } 


    private String getRealPathFromURI(Uri contentURI) { 
      String result; 
      Cursor cursor = getContentResolver().query(contentURI, null, null, null, null); 
      if (cursor == null) { // Source is Dropbox or other similar local file path 
       result = contentURI.getPath(); 
      } else { 
       cursor.moveToFirst(); 
       int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
       result = cursor.getString(idx); 
       cursor.close(); 
      } 
      return result; 
     } 
26

Gdy pojawi się zawartość: // uri, musisz kwerendy rozpoznawania nazw treści, a następnie chwycić wyświetlaną nazwę.

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (requestCode) { 
    case 1: 
     if (resultCode == RESULT_OK) { 
      // Get the Uri of the selected file 
      Uri uri = data.getData(); 
      String uriString = uri.toString(); 
      File myFile = new File(uriString); 
      String path = myFile.getAbsolutePath(); 
      String displayName = null; 

      if (uriString.startsWith("content://")) {     
       Cursor cursor = null; 
       try {       
        cursor = getActivity().getContentResolver().query(uri, null, null, null, null);       
        if (cursor != null && cursor.moveToFirst()) {        
         displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)); 
        } 
       } finally { 
        cursor.close(); 
       } 
      } else if (uriString.startsWith("file://")) {   
       displayName = myFile.getName(); 
      } 
     } 
     break; 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 
+0

Dziękujemy @ cinthiaro zapisałeś mój dzień –

+3

jak uzyskać ścieżkę do pliku? otrzymujesz tylko nazwę pliku –

+1

@ParthAnjaria. Czy w końcu uzyskałeś ścieżkę do pliku? Jeśli tak, czy możesz go udostępnić? –

0

Oto pełna rozwiązanie:

Przełóż kontekst i obiekt URI z onActivityResult poniżej czynności, aby uzyskać poprawną ścieżkę:

daje ścieżkę jako /storage/emulated/0/APMC Mahuva/Report20-11-2017.pdf (gdzie mam wybrany ten plik Report20-11-2017.pdf)

String getFilePath(Context cntx, Uri uri) { 
    Cursor cursor = null; 
    try { 
     String[] arr = { MediaStore.Images.Media.DATA }; 
     cursor = cntx.getContentResolver().query(uri, arr, null, null, null); 
     int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     return cursor.getString(column_index); 
    } finally { 
     if (cursor != null) { 
      cursor.close(); 
     } 
    } 
} 
0

najpierw sprawdzić, czy zezwolenie jest udzielane na zgłoszeniu .. Poniżej metoda służy do sprawdzania biegu -time pozwolenie”

public void onClick(View v) { 
      //Checks if the permission is Enabled or not... 
      if (ContextCompat.checkSelfPermission(thisActivity, 
        Manifest.permission.READ_EXTERNAL_STORAGE) 
        != PackageManager.PERMISSION_GRANTED) { 
       ActivityCompat.requestPermissions(thisActivity, 
         new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
         REQUEST_PERMISSION); 
      } else { 
       Intent galleryIntent = new Intent(Intent.ACTION_PICK, 
         android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       startActivityForResult(galleryIntent, USER_IMG_REQUEST); 
      } 
     } 

i poniżej metody wykorzystywane w celu znalezienia uri nazwę ścieżki pliku

private String getRealPathFromUri(Uri uri) { 
    String[] projection = {MediaStore.Images.Media.DATA}; 
    CursorLoader cursorLoader = new CursorLoader(thisActivity, uri, projection, null, null, null); 
    Cursor cursor = cursorLoader.loadInBackground(); 
    int column = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    String result = cursor.getString(column); 
    cursor.close(); 
    return result; 
} 

i powyższej metody mogą być stosowane jako

if (requestCode == USER_IMG_REQUEST && resultCode == RESULT_OK && data != null) { 
     Uri path = data.getData(); 
     try { 
      String imagePath = getRealPathFromUri(path); 
      File file = new File(imagePath); 
      RequestBody reqFile = RequestBody.create(MediaType.parse("image/*"), file); 
      MultipartBody.Part imageFile = MultipartBody.Part.createFormData("userImage", file.getName(), reqFile);