Set Notification Sound from Assets folder
-
25-10-2019 - |
سؤال
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.
المحلول
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");
نصائح أخرى
This worked perfectly for me. I found it on another post.
notification.sound = Uri.parse("android.resource://my.package.name/raw/notification");
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.
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.
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.
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;
}