20

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

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

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

を試してみました

もこの

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

ようにしようとしましたが、私の問題はまだ解決されていません。

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

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 

または任意の他のアイデア?私にヒントを与えてください。

+0

? –

+0

私の例外を更新しました – Dharmendra

答えて

30

ur MP3ファイルをres->raw folderに入れて、raw folderからサウンドファイルを取得しようとします。

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

OR

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

興味深い[リンク](http://www.anddev.org/multimedia-problems-f28/how-to-solve-pvmferrnotsupported-error-while-playing-sound-t17270.html) – rajpara

+0

これはコンテンツを作成するための素晴らしいアイデアですプロバイダは内部ファイル – Dharmendra

+3

にアクセスしていることに注意してください。サウンドは.oggではなく.mpgでなければならないことがわかりました。また、rajparaが示したように、 。android.resource:だから私のサウンドファイルは、MyProjectと/ RES /生フォルダ内のpush.mp3は、と協力 – leontx

0

アセットフォルダから何かを読み込む正しいパスはfile:///android_assets/relative_path_to_your_fileです。 スラッシュはです。このように通知音を設定しようとはしていませんが、これをWebViewで数回成功させて、同じように動作すると期待しています。

+0

私は3つのスラッシュで試してみましょう – Dharmendra

+0

3つのスラッシュを入れた後では機能しません:( – Dharmendra

+0

元の投稿と同じエラーが表示されましたか? – Bendik

5

資産そのアプリに民間資源である、私はあなたが着信音としてそれらを設定することができるよう文句を言わないと思いますが、あなたはメディア・プロセスがアクセスできる公開ファイルが必要になります着メロを設定する。着信音として設定するには、ファイルをsdcardにコピーする必要があります。

+0

うん、私はあなたが正しいと思います。プライベートリソースにアクセスするには、私はコンテンツプロバイダを使用する必要があります。 – Dharmendra

0

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

  1. をオーディオを再生することができる午前私は、データディレクトリにファイルをコピーすること。
  2. 通知サウンドではまだデータディレクトリにアクセスできないので、データファイル内にあるread moreでオーディオファイルを共有するためにカスタムContent Providerを作成します。
  3. 通知作成時に、ファイルのUriを通知音に設定しました。

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

0

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

と私はこのAssetFileDescriptorから着メロを得ることができますか?あなたは、通知して再生するサウンドのURI NotificationCompat.Builder与えることができます@wutzebaer – wutzebaer

+0

。 コンテンツプロバイダで openAssetFileこのURIを与えられ、 を再生するには、通知にAssetFileDescriptorを返しhttp://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html – Chiatar

6

ものの、直接資産フォルダにアクセスすることができますこれは私のために完全に働きました。私は別のポストでそれを見つけました。まさに起こって何

notification.sound = Uri.parse("android.resource://my.package.name/raw/notification"); 
+0

あなたのウリアセットからではなくリソースフォルダにアクセスしていることを示します。リソース内の行フォルダからファイルを参照しています。 – Dharmendra

+0

は確かにこれは我々が行フォルダにサウンドファイルを置くことを良いですし、そのファイルを参照してください。 – Dharmendra

関連する問題