2017-02-25 30 views
1

createChooserを使用してURIパスから絶対パスを取得します。私がしなければならないこと?あなたがこの問題を解決する解決策を知っているなら、私に知らせてください。ところで、 URIパス表示パスに従ってください。createChooserを使用してAndroidでオーディオ絶対パスを取得する方法

content://com.android.providers.media.documents/document/audio%3A38 

ノーマルパス表示フォローパス:ここに

/document/audio:38 

が私のコードです:私は韓国人学生です

public void set_music_path(View view) { 
    Intent intent = new Intent(); 
    intent.setType("audio/*"); 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    startActivityForResult(Intent.createChooser(intent, "음악을 선택해주세요."), 1); 
} 

protected void onActivityResult(int req, int res, Intent data){ 
    super.onActivityResult(req, res, data); 

    Uri uri = data.getData(); 
    Toast.makeText(this, uri.toString(), Toast.LENGTH_SHORT).show(); 
    Toast.makeText(this, uri.getPath().toString(), Toast.LENGTH_SHORT).show(); 
} 

、文法上の誤りがあります。 文法エラーがある場合、

答えて

0

まず自分の障害を見落とす、あなたはcreateChooser()は、あなたが戻ってあなたstartActivityForResult()呼び出しから取得Uriの形式とは何の関係もないことを認識する必要があります。どんなACTION_GET_CONTENTアクティビティでも、それが望むどんな有効なものも手渡すことができます。UriあなたはstartActivityForResult()の電話からUriのようなものを得ることができます。もしあなたがcreateChooser()の部分を中止したとしても。

第2に、Uriはファイルではないことを認識する必要があります。 ACTION_GET_CONTENTアクティビティは、アクティビティが望むものを指すUriを返すことができます。

Uriのスキームはfileであることを起こる場合、getPath()はあなたがアクセスすることができました(おそらく)というファイルを指す、ファイルシステムのパスになります。

ここ—その後、Uriを指すことができそうであるようにスキームがcontent —の場合:

  • あなたはリムーバブルストレージに
  • ファイルにアクセスすることができ、外部記憶装置上のファイル
  • アクセスできない別のアプリの内部ストレージにあるファイル
  • 他のアプリのアセットpファイルではありません。
  • データベースのBLOB列の値です。ファイルではありません。
  • このWebページの形式はファイルではありません
  • Uriで識別されるコンテンツを操作するデバイス
  • そしてそう使用ContentResolver

上とopenInputStream()(そしておそらくopenOutputStream())上のファイルではありませんこれは、インターネットからストリーミングされるコンテンツ。

Fileが必要なサードパーティライブラリを使用している場合は、InputStreamで動作するより優れたライブラリに切り替えてください。

ライブラリが見つからない場合は、InputStreamを使用して、コンテンツのバイトを管理しているファイル(たとえば、getCacheDir())にコピーしてから、そのファイルを使用する必要があります。

+0

いくつかの例を表示できますか? –

+0

@박光油:https://github.com/commonsguy/cw-omnibus/tree/master/Documents/Consumer https://github.com/commonsguy/cw-omnibus/tree/master/Documents/Durable – CommonsWare

+0

ちょっと!私はあなたの言うことを知りたい。 InputStreamの使い方 –

関連する問題