问题
I am attaching the sound files in the assets folder for play sound in the notification but I am not able to play sound from the assets folder.
I have setting page from which user can set the sound for the notification and also user can play sound. This part is completed. I am able to play sound from the assets folder using Media Player. I can use same logic at the Notification creation time but problem can be happened when user click on the Notification because media player still playing the sound.
I tried
notification.sound = Uri.parse("file:///android_asset/Sound/Long/AlarmClock.mp3");
also tried like this
notification.sound = Uri.parse("android_asset/Sound/Long/AlarmClock.mp3");
but my issue is still not solved.
Is there any other way to set the sound in the notification from the assets directory ?
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
or any other idea ? Please give me hint.
回答1:
put ur mp3 file in res->raw folder
, try to fetch sound file from 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");
回答2:
This worked perfectly for me. I found it on another post.
notification.sound = Uri.parse("android.resource://my.package.name/raw/notification");
回答3:
assets are private resources to that app, I think you wont be able to set them as ringtone, you will need a public file which is accessible by the media process to set ringtone. You will have to copy the file to sdcard to set it as ringtone.
回答4:
The correct path to load something from your assets folder is file:///android_assets/relative_path_to_your_file
. Note the three slashes here. Although I have not tried to set a notification sound this way, I have used this with a WebView with success a number of times, and would expect it to work the same way.
回答5:
I was not able to access directly the assets audio file to the Notification. So i follow this steps and so I am able to play audio in the Notification
- I copy that files to the data directory.
- Still data directory is not accessible to the Notification sound so I create a custom
Content Provider
to share the audio file in the read more which are now in data folder. - Now at the time of notification creation I had set the Uri of the file to the Notification sound.
Now using this steps I am able to set custom sound to the Notification.
回答6:
ContentProvider is the way to go. I don't think there is a need to copy files to the data directory like @Dharmendra suggests. You can access the asset folder directly though the 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;
}
来源:https://stackoverflow.com/questions/8801122/set-notification-sound-from-assets-folder