Android 从Filepicker获取文件扩展名
这是我活动课的一部分。通过调用下面的Intent,我打开一个文件选择器Intent来选择图像或视频。到目前为止,这是可行的Android 从Filepicker获取文件扩展名,android,android-intent,filepicker,Android,Android Intent,Filepicker,这是我活动课的一部分。通过调用下面的Intent,我打开一个文件选择器Intent来选择图像或视频。到目前为止,这是可行的 public class Activity extends AppCompatActivity { EditText et; private static final int PICKFILE_RESULT_CODE = 1; @Override public void onCreate(Bundle savedInstanceState
public class Activity extends AppCompatActivity {
EditText et;
private static final int PICKFILE_RESULT_CODE = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// EditText to show filepath after intent
et = (EditText)findViewById(R.id.et);
// Start intent to pick a file
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*|video/*");
startActivityForResult(intent,PICKFILE_RESULT_CODE);
}
在这里,我检索文件的路径:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode)
{
case PICKFILE_RESULT_CODE:
if(resultCode==RESULT_OK){
// Get path of selected file and set it to editText
String filePath = data.getData().getPath();
et_upload.setText(filePath);
}
break;
}
}
}
结果是,
"/path/to/file/fileName".
但我想包括文件扩展名:
"/path/to/file/fileName.png"
我错过了什么
提前感谢您的帮助。:)
到目前为止,这是可行的
public class Activity extends AppCompatActivity {
EditText et;
private static final int PICKFILE_RESULT_CODE = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// EditText to show filepath after intent
et = (EditText)findViewById(R.id.et);
// Start intent to pick a file
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*|video/*");
startActivityForResult(intent,PICKFILE_RESULT_CODE);
}
setType()
不支持|
运算符
我错过了什么
首先,这条路本身毫无意义ACTION\u GET\u CONTENT
通常会返回一个CONTENT://
Uri
,并且该路径仅对ContentProvider
有意义。例如,这不是文件系统上文件的路径
其次,Uri
不必包含文件扩展名
如果您想知道该
Uri
支持的内容的MIME类型,请使用ContentResolver
和。如果要将该MIME类型转换为文件扩展名,.通过这种方式可以实现这一点。记住,这不是一个完整的解决方案
根据它调整代码
public String getImagePath(Uri uri){
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
cursor.moveToFirst();
String document_id = cursor.getString(0);
document_id = document_id.substring(document_id.lastIndexOf(":")+1);
cursor.close();
cursor = getContentResolver().query(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);
cursor.moveToFirst();
String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
cursor.close();
return path;
}