2016-07-02 83 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

相关问题