2011-07-15 8 views
0

私のコードの動作が奇妙なことに気付き、誰かが光を当てることを望んでいます。Uri with File:///対話内容:// - 音楽ファイル情報を取得する

 String temp = "file:///sdcard/music/05 Folsom Prison Blues.mp3"; 
     String temp2 = "content://media/external/audio/media/10"; 

     Uri uri = Uri.parse(temp); 

     Cursor musiccursor = null; 
     musiccursor = managedQuery(uri, null, null, null, null); 

     try { 
     if (musiccursor.moveToFirst()) { 
      String title; 
      int titleColumn = musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE); 
       title = musiccursor.getString(titleColumn); 
      item.setText(title); 
     } 

私が気づいている問題は、temp2のすべてが正常に動作していることです。曲のタイトルを取得できます。しかし一時的なmusiccursorは毎回nullですので、私たちはnullpointerexceptionを投げます。違いは何ですか?私はtempのエンコードされたバージョンを試しました(スペースを%20に変換します)、それは動作しません。私はtemp2で作成されたuriを使用して、問題なしで曲を演奏することができます。ここでは何が欠けているのか分かりません。

ありがとうございます!

+0

なぜコンテンツプロバイダを使用してファイルを取得していますか? –

答えて

1

file://はコンテンツプロバイダによって管理されているスキームではありません(content://のみ)ので、ContentResolverは何も処理できません。

+1

返事をありがとう、私はそれを感謝します。私がfile://とcontent://の両方で終わる理由は、ユーザーが曲ファイル(音楽、アストロなど)を選択するために使用するプログラムを選択できるようにするためです。あるものを他のものに変換する方法はありますか、それともそれぞれをテストするだけですか? – chief

+0

'MediaStore'コンテンツプロバイダのものを突き抜けて、ファイルパスを指定してメタデータを取得する方法を考え出すことができますが、試していません。 – CommonsWare

+0

Cool。私の失明を治してくれてありがとう:] – chief

関連する問題