14

私のアプリケーションでは、ユーザーに音楽を選択する選択肢を提供するピッカーを作成したいと思います。ネイティブのAndroidピッカーを使用したい。次のコードを使用して、ネイティブのAndroidミュージックピッカーを開きました。

final Intent intent2 = new Intent(Intent.ACTION_PICK);
intent2.setType("audio/*");
startActivityForResult(intent2, 1);

しかし、それを実行すると、ActivityNotFoundExceptionと次のエラーメッセージが表示されます。

「お使いの携帯電話には、ファイルを選択するために使用できるミュージックギャラリーがありません。別の種類のファイルを送信してみてください。」

私はそこで何か間違ったことをしていますか?

4

3 に答える 3

19

これは私にとってうまくいきました:

public static final int REQ_PICK_AUDIO = 10001;
//------   
Intent audio_picker_intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
activity.startActivityForResult(audio_picker_intent, REQ_PICK_AUDIO);

Intent.ACTION_GET_CONTENTを使用したより一般的なインテントは、オーディオファイル(Astroファイルマネージャーなど)を選択するためのアクティビティのいくつかのオプションをユーザーに提示できます。ただし、ユーザーは任意のファイルを選択できますが、必ずしもオーディオファイルである必要はありません。ユーザーがメディアからオーディオファイルを選択できるようにするだけのものが欲しかったのです。これでうまくいきました。

于 2013-06-22T15:56:09.600 に答える
7

最新のコアミュージックアプリのAndroidManifest.xmlファイルを見ると、使用しているオプションに光が当てられる場合があります。例えば:

<activity android:name="com.android.music.MusicPicker"
        android:label="@string/music_picker_title" android:exported="true" >
    <!-- First way to invoke us: someone asks to get content of
         any of the audio types we support. -->
    <intent-filter>
        <action android:name="android.intent.action.GET_CONTENT" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.OPENABLE" />
        <data android:mimeType="audio/*"/>
        <data android:mimeType="application/ogg"/>
        <data android:mimeType="application/x-ogg"/>
    </intent-filter>
    <!-- Second way to invoke us: someone asks to pick an item from
         some media Uri. -->
    <intent-filter>
        <action android:name="android.intent.action.PICK" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.OPENABLE" />
        <data android:mimeType="vnd.android.cursor.dir/audio"/>
    </intent-filter>
</activity>

だからこれに基づいて、あなたは最初に試すかもしれません

final Intent intent2 = new Intent(Intent.ACTION_GET_CONTENT);
intent2.setType("audio/*");
startActivityForResult(intent2, 1);

それがあなたのニーズに合っているかどうかを確認してください。上記の例で示したカテゴリフラグを追加して、結果を絞り込むこともできます(たとえばOPENABLE、ストリームとして開くことができるコンテンツのみにフィルタリングする必要があります。

于 2012-08-13T17:06:47.203 に答える
0

これに沿った何かがうまくいくかもしれません

// some Intent that points to whatever you like to play
Intent play = new Intent(Intent.ACTION_VIEW);
play.setData(Uri.fromFile(new File("/path/to/file")));
// create chooser for that intent
try {
    Intent i = Intent.createChooser(play, "Play Music");
    c.startActivity(i);
} catch(ActivityNotFoundException ex) {
    // if no app handles it, do nothing
}
于 2012-08-13T16:57:35.847 に答える