2017-01-28 12 views
2

私は、ユーザーにオーディオファイルを選択させたいと思っています。そして、そのファイルパスを取得したいと思います。しかし、私は得意先のUriがnullであるので、私はさらに簡単な問題があります。私は何か意味のある、つまりnullでないものを得ることができましたか?ファイル選択のインテントから非ヌルデータを取得するにはどうすればいいですか?

private void MainActivity_Click1(object sender, System.EventArgs e) 
    { 
     //var intent = new Intent(); 
     var intent = new Intent(Intent.ActionPick, Android.Provider.MediaStore.Audio.Media.ExternalContentUri); 

     intent.SetType("audio/*"); 
     intent.SetAction(Intent.ActionGetContent); 
     StartActivityForResult(
      Intent.CreateChooser(intent, "Select audio file"), SelectAudioCode); 
    } 

と選択に応答していない:意図開始

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) 
    { 
     base.OnActivityResult(requestCode, resultCode, data); 

     if (resultCode == Result.Ok && requestCode==SelectAudioCode) 
     { 
      Android.Net.Uri uri = Intent.Data; 
      audioFileNameText.Text = uri == null ? "<NULL>" : uri.ToString(); 
     } 
    } 

どんなに私はintentを作成する方法を(上記のコードを参照してください)、私はいつもNULLを参照してください。

更新:私は、パラメータを経由して渡されたIntentを使用している場合、それのDataプロパティは、同様nullです。

答えて

2

私は、ユーザーにオーディオファイルを選択させていただきたいと思いますが、そのファイルパスを取得したいと思います。しかし、私は得意先のUriがnullなので、さらに簡単な問題を抱えています。

data.Dataからコンテンツを取得できます。しかし、あなたは、コンテンツのURIのうち、ファイルパスを取得したい場合、あなたは実際のパスにコンテンツのURIを変換する必要があります。

protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data) 
{ 
    base.OnActivityResult(requestCode, resultCode, data); 
    string abc= getRealPathFromURI(this,data.Data); 
} 


public string getRealPathFromURI(Context context, Uri contentUri) 
{ 
    ICursor cursor = null; 
    try 
    { 
     string[] proj = { MediaStore.Audio.AudioColumns.Data}; 
     cursor = ContentResolver.Query(contentUri, proj, null, null, null); 
     int column_index = cursor.GetColumnIndexOrThrow(MediaStore.Audio.AudioColumns.Data); 
     cursor.MoveToFirst(); 
     return cursor.GetString(column_index); 
    } 
    finally 
    { 
     if (cursor != null) 
     { 
      cursor.Close(); 
     } 
    } 
} 

、について説明更新:

あなたが現在Intent.Dataで使用している意図が目的であります

enter image description here

ので、代わりのIntent.Dataを使用して、あなたがintent再使用する必要があります。それは、現在の活動ではなく、チューが戻さという意図を開始しますdata引数であるチュー活動、によって回転:あなたはXamarinを使用しているよう

enter image description here

+0

ありがとうございますが、私が書いたように - 「私は単純な問題があり、Uriはnullです」。私。あなたは「data.DataからコンテンツUriを得ることができる」と書いたように、 'data.Data'が' null'なので、それは私のためのさらなるステップです。私は全く処理できません。 – greenoldman

+1

使用しているインテントは、現在のアクティビティを開始するインテントですが、セレクタから返されたインテントからのみUriを取得できます。 @greenoldmanそれをはっきりとはっきりさせないで申し訳ありませんが、私は現在のアクティビティのインテントと 'OnActivityResult'のインテントの違いを明確にするために私の答えを更新しました。 –

+0

ありがとうございます、私は私の質問を更新するつもりです、私はその 'Intent'もチェックしました。また、そのデータはnullです:-( – greenoldman

1

が見えます。あなたが達成しようとしているものと同等のJavaはこれです。

+0

ありがとうございます、しかし 'ファイル'は何でしょうか?私は、ファイルを選択するようにユーザーに依頼しようとしているので、私は彼女/彼女が選択するものを事前に知らない。 – greenoldman

関連する問題