2016-09-26 47 views
2

我想從手機上選擇PDF文件按鈕單擊並在文本視圖上顯示其文件名。到現在我已經做了打開文件管理器,選擇按鈕PDF點擊從手機上選擇PDF文件按鈕單擊並在文本視圖上顯示其文件名

btnUpload.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(); 
      intent.setAction(Intent.ACTION_GET_CONTENT); 
      intent.setType("application/pdf"); 
      startActivity(intent); 
     } 
    }); 

我怎麼上textview選定的文件名?

+0

得到所選文件的URI,並從它那裏得到的文件名。 – SripadRaj

+0

可能使用'startActivityForResult'並實現'OnActivityResult'來處理返回的文件名。 –

回答

5

use startActivityForResult(intent,1212) at startActivity(intent);並做的foll0wing onActivityResult

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (requestCode) { 
    case 1212: 
     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

謝謝!!!工作很好:) –

+0

@AbhilashHarsole很高興!!!幫助你。快樂編碼:) – Nikhil

1

添加在您的getPDFPath方法:

public String getPDFPath(Uri uri){ 

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

    String[] projection = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = getContentResolver().query(contentUri, projection, null, null, null); 
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
} 

在你的情況,這個代碼是專門針對DonwloadProvider文件,進一步落實檢查Paul Burke answer。我個人使用他的aFileChooser library來避免這種問題。

希望這會有所幫助!

2

你可以做到以下幾點:

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    String fileName = getFileName(this, data.getData()); 

    yourTextView.setText(fileName); 
} 



public String getFileName(Context context, Uri uri) { 
    if (uri != null && context != null) { 
     Cursor returnCursor = 
      context.getContentResolver().query(uri, null, null, null, null); 
     if(returnCursor != null) { 
     int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME); 
     int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE); 
     returnCursor.moveToFirst(); 
     if(nameIndex >= 0 && sizeIndex >= 0){ 
      Log.d("File Name : " + returnCursor.getString(nameIndex)); 
      Log.d("File Size : " + Long.toString(returnCursor.getLong(sizeIndex))); 
      Boolean isValidFile = checkFormat(returnCursor.getString(nameIndex)); 

      if(!isValidFile){ 
      return returnCursor.getString(nameIndex); 
      } 
    } 

private Boolean checkOtherFileType(String filePath){ 
    if(!Utility.isNullOrEmpty(filePath)) { 
     String filePathInLowerCase = filePath.toLowerCase(); 
     if(filePathInLowerCase.endsWith(".pdf")) { 
     return true; 
     } 
    } 
    return false; 
    } 

希望這將幫助你

+0

什麼是'checkFormat'你沒有把它... – DarckBlezzer

相關問題