2014-06-20 7 views
12

Ich starte die Absicht zur Auswahl von Documnets mit dem folgenden Code.Android - So erhalten Sie den ausgewählten Dateinamen aus dem Dokument

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

In onActivity ergibt, wenn ich versuche, den Dateipfad zu erhalten ist eine andere Zahl an der Stelle des Dateinamen geben.

@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); 
} 

Dieser Weg Wert ich bekomme so. "content: //com.android.providers.downloads.documents/document/1433" Aber ich möchte echten Dateinamen wie doc1.pdf etc .. Wie bekomme ich es?

+1

verwendet werden, was Sie erhalten Wenn Sie myFile.getName() verwenden? – Opiatefuchs

Antwort

-1

Sie können dies versuchen, m ich hoffe, es wird helfen, 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

Wenn Sie einen Inhalt bekommen: // uri, werden Sie einen Inhalt Resolver und dann den Anzeigenamen greifen abfragen müssen. Hier

@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

Danke @cinthiaro du hast meinen Tag gespeichert –

+3

Wie bekomme ich Dateipfad? Sie erhalten nur den Dateinamen –

+1

@ParthAnjaria. Hast du den Dateipfad endlich bekommen? Wenn ja, können Sie es bitte teilen? –

0

ist die Komplettlösung:

Fahren Sie mit Kontext und URI-Objekt von onActivityResult auf unter Funktion auf den richtigen Pfad zu bekommen:

es den Pfad als /storage/emulated/0/APMC Mahuva/Report20-11-2017.pdf gibt (wo ich ausgewählt habe diese Report20-11-2017.pdf Datei)

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

zuerst prüfen, ob die Genehmigung für Anwendung .. Im Folgende Verfahren erteilt wird, verwendet Lauf zu überprüfen -Zeit Erlaubnis‘

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); 
      } 
     } 

und unterhalb der Methode wird die uri Pfadnamen der Datei finden

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; 
} 

und das obige Verfahren kann als

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);