簡體   English   中英

從Android中的外部存儲獲取文件路徑

[英]Get path of file from External Storage in 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永遠不會被調用,並且日志仍然為空。 另外,我無法選擇文件。

模擬器的屏幕截圖

模擬器的屏幕截圖

onClicks對ids.txt無效。

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

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

但是onActivityResult永遠不會被調用,並且日志仍然為空,我也無法選擇一個文件

首先,只有點擊文件后,該活動才會以RESULT_OK響應觸發onActivityResult()

其次,如果要調用該片段的 onActivityResult() ,則在該片段上調用startActivityForResult() 您正在活動上調用startActivityForResult() ,因此正在調用活動的onActivityResult()

onClicks對ids.txt無效。

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

另外,擺脫String FilePath = data.getData().getPath(); 正確使用Uri 實現ACTION_GET_CONTENT活動不必返回file: Uri 實際上,隨着Android N開始禁止該file: Uri ,這種情況將變得非常罕見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM