2016-07-02 127 views
0

我想要獲取用戶使用默認文件查看器選擇的文件的路徑。從Android中的外部存儲獲取文件的路徑

我有一個片段內的按鈕,並希望設置其onClickListener獲取該文件的路徑。

View rootView = inflater.inflate(R.layout.openfile,container,false); 
    Button choseFile = (Button) rootView.findViewById(R.id.btn_chose_file); 
    final EditText et1 = (EditText)rootView.findViewById(R.id.opened_file); 
    choseFile.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
      intent.setType("file/*"); 
      getActivity().startActivityForResult(intent,PICKFILE_RESULT_CODE) ; 
     } 

     protected void onActivityResult(int requestCode, int resultCode, Intent data) 
     { 
      // TODO Auto-generated method stub 
      switch (requestCode) 
      { 
       case PICKFILE_RESULT_CODE: 
        if (resultCode == Activity.RESULT_OK) { 
         String FilePath = data.getData().getPath(); 
         et1.setText(FilePath); 
         Log.e("activity", "onActivityResult: "); 
        } 
        break; 

      } 
     } 

    }); 
    return rootView; 
} 

但onActivityResult永遠不會被調用,並且日誌保持爲空。另外,我無法選擇文件。

截圖模擬器

Screenshot of emulator

的onClick上ids.txt什麼都不做的。

+0

如果你使用android 6.0比你需要運行時權限或者將Mainfiest的權限設置爲all –

回答

0

我想獲取用戶使用默認文件查看器選擇的文件路徑。

Android沒有「默認文件查看器」。您正在使用無效的MIME類型ACTION_GET_CONTENT(因爲沒有以file/開頭的正式MIME類型)。我希望你的代碼在大多數設備上失敗。

但onActivityResult不會被調用和日誌保持爲空,還我無法選擇一個文件

首先,只有當你點擊一個文件將這一活動觸發onActivityResult()RESULT_OK響應。

第二,如果你想片段的onActivityResult()被調用,然後調用startActivityForResult()的片段。您正在調用startActivityForResult()活動,因此正在調用活動「onActivityResult()」。

onClick on ids.txt什麼都不做。

嘗試有效的MIME通配符MIME類型(例如,text/**/*),看看是否有更好的效果。

另外,請擺脫String FilePath = data.getData().getPath();use the Uri properly。實施ACTION_GET_CONTENT的活動不必返回file:Uri。事實上,未來,這將變得非常罕見,如Android N is starting to ban the file:Uri

相關問題