![](/img/trans.png)
[英]Open file from specific folder with Intent.ACTION_OPEN_DOCUMENT
[英]How to get file extension of a file picked with Intent.ACTION_OPEN_DOCUMENT?
我想獲取我使用 Intent.ACTION_OPEN_DOCUMENT 選擇的文件的文件擴展名。 如何獲得?
這是我啟動選擇器的方式:
private void startFilePicker(){
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(intent, CODE_ACTION_OPEN_DOCUMENT_FILE);
}
這是選擇文件時的回調:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//region New Picker
if (requestCode == CODE_ACTION_OPEN_DOCUMENT_FILE){
if (resultCode == RESULT_OK){
if (data != null){
if (data.getData() != null){
Uri uri = data.getData();
//Get file extension here.
}
}
}
}
}
當我嘗試通過執行uri.getPath()
獲取文件路徑時,我得到類似image:105571
或acc=1;doc=9204
。 所以我無法從路徑中獲取它。
問題是如何確定選擇文件的文件擴展名?
創建這兩種方法...
public String getPath(Context context, Uri uri) throws URISyntaxException {
if ("content".equalsIgnoreCase(uri.getScheme())) {
String[] projection = { "_data" };
Cursor cursor = null;
try {
cursor = context.getContentResolver().query(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow("_data");
if (cursor.moveToFirst()) {
return cursor.getString(column_index);
}
} catch (Exception e) {
// Eat it
}
}
else if ("file".equalsIgnoreCase(uri.getScheme())) {
return uri.getPath();
}
return null;
}
public String getFileExtension(String filePath){
String extension = "";
try{
extension = filePath.substring(filePath.lastIndexOf("."));
}catch(Exception exception){
e("Err", exception.toString()+"");
}
return extension;
}
然后用這個
if (data.getData() != null){
try{
Uri uri = data.getData();
//Get file extension here.
String filePath = getPath(YourActivity.this, uri);
String fileExtension = getFileExtension(filePath);
File file = new File(filePath);
}catch(Exception e){
e("Err", e.toString()+"");
}
}
調用內容解析器,並在uri上對顯示名稱執行query()。
從uri獲得路徑,獲得路徑或獲得真實路徑的所有解決方案都是廢話。
您可以使用以下方法:
public static String getMimeType(String url) {
String type = null;
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
if (extension != null) {
MimeTypeMap mime = MimeTypeMap.getSingleton();
type = mime.getMimeTypeFromExtension(extension);
}
return type;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.