web-dev-qa-db-ja.com

アセットフォルダから通知音を設定する

通知のサウンドを再生するためにアセットフォルダー内のサウンドファイルを添付していますが、アセットフォルダーからサウンドを再生できません。

通知の音を設定したり、音を鳴らしたりできる設定ページがあります。この部分は完了です。 MediaPlayerを使用してアセットフォルダからサウンドを再生できます。通知の作成時に同じロジックを使用できますが、メディアプレーヤーがまだサウンドを再生しているため、ユーザーが通知をクリックすると問題が発生する可能性があります。

私は試した

notification.sound = Uri.parse("file:///Android_asset/Sound/Long/AlarmClock.mp3");

このようにも試してみました

notification.sound = Uri.parse("Android_asset/Sound/Long/AlarmClock.mp3");

しかし、私の問題はまだ解決されていません。

アセットディレクトリからの通知にサウンドを設定する他の方法はありますか?

Logcat

01-10 09:57:01.509: ERROR/PlayerDriver(31): Command PLAYER_SET_DATA_SOURCE completed with an error or info PVMFErrNotSupported
01-10 09:57:01.509: ERROR/MediaPlayer(52): error (1, -4)
01-10 09:57:01.519: WARN/NotificationService(52): error loading sound for Android_asset/Sound/Long/audio.mp3
01-10 09:57:01.519: WARN/NotificationService(52): Java.io.IOException: Prepare failed.: status=0x1
01-10 09:57:01.519: WARN/NotificationService(52):     at Android.media.MediaPlayer.prepare(Native Method)
01-10 09:57:01.519: WARN/NotificationService(52):     at Android.media.AsyncPlayer.startSound(AsyncPlayer.Java:64)
01-10 09:57:01.519: WARN/NotificationService(52):     at Android.media.AsyncPlayer.access$200(AsyncPlayer.Java:33)
01-10 09:57:01.519: WARN/NotificationService(52):     at Android.media.AsyncPlayer$Thread.run(AsyncPlayer.Java:99)
01-10 09:57:01.519: WARN/PlayerDriver(31): PVMFInfoErrorHandlingComplete

または他のアイデア?ヒントを教えてください。

22
Dharmendra

urmp3ファイルをres->raw folderに入れ、raw folderからサウンドファイルをフェッチしてみてください。

Uri path = Uri.parse("Android.resource://com.androidbook.samplevideo/" + R.raw.myvideo);

[〜#〜]または[〜#〜]

Uri path = Uri.parse("Android.resource://com.androidbook.samplevideo/raw/myvideo");
35
rajpara

これは私にとって完璧に機能しました。別の投稿で見つけました。

notification.sound = Uri.parse("Android.resource://my.package.name/raw/notification");
8
Comacoco

アセットはそのアプリのプライベートリソースです。着信音として設定することはできないと思います。着信音を設定するには、メディアプロセスからアクセスできる公開ファイルが必要になります。着信音として設定するには、ファイルをsdcardにコピーする必要があります。

4
nandeesh

アセットフォルダから何かをロードするための正しいパスはfile:///Android_assets/relative_path_to_your_fileです。 つのスラッシュここに注意してください。この方法で通知音を設定しようとはしていませんが、これをWebViewで何度も使用して成功しており、同じように機能することを期待しています。

0
Bendik

アセットのオーディオファイルから通知に直接アクセスできませんでした。だから私はこの手順に従い、通知でオーディオを再生することができます

  1. そのファイルをデータディレクトリにコピーします。
  2. それでもデータディレクトリは通知音にアクセスできないので、カスタムContent Providerを作成して、現在データフォルダにある続きを読むオーディオファイルを共有します。
  3. 通知作成時に、ファイルのURIを通知音に設定していました。

この手順を使用して、カスタムサウンドを通知に設定できます。

0
Dharmendra

ContentProviderは行く方法です。 @Dharmendraが示唆するように、ファイルをデータディレクトリにコピーする必要はないと思います。 ContentProviderを介してアセットフォルダーに直接アクセスできます

public AssetFileDescriptor openAssetFile(Uri uri, String mode)
        throws FileNotFoundException {
    String filePart = Sound.getSoundFileName(uri);

    try {
        return getContext().getResources().getAssets().openFd(filePart + ".ogg");
    }catch(IOException e) {
        Log.d(TAG, "fail " + e.getMessage());

    }
    return null;
}
0
Chiatar