2017-10-26 86 views
0

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。だから私はそれを道から得ることはできない。

質問は、選択したファイルのファイル拡張子を確認する方法ですか?

答えて

1

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()+""); 
    } 
} 
+0

をありがとう!これは私の問題を解決しましたが、私はこの問題について別の素早い質問があります。ファイル自体を取得するにはどうすればよいですか?私はFile file = new File(uri.getPath())を使用しています。これは安全ですか? –

+0

ファイルファイル=新しいファイル(filePath); –

+0

もう一度おねがいします!しかし、これには1つの問題があります.UriやGoogleドライブから選択したファイルは取得できません。これに対する解決策はありますか? –

0

コンテンツリゾルバを呼び出し、表示名としてuriをquery()します。

uriからのパス、getパス、または実際のパスを持つすべてのソリューションは嫌です。

0

あなたがこの方法を使用することができます...この2つのメソッドを作成します。

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; 
} 
関連する問題