从Android中的外部存储获取文件路径

时间:2016-07-02 10:57:19

标签: android android-fragments android-intent

我正在尝试使用默认文件查看器获取用户选择的文件路径。

我在片段中有一个按钮,想要设置它的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 on ids.txt什么都不做。

1 个答案:

答案 0 :(得分:0)

  

我正在尝试使用默认文件查看器获取用户选择的文件路径。

Android没有“默认文件查看器”。您使用ACTION_GET_CONTENT的MIME类型无效(因为没有以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