سؤال

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

  1. I copy that files to the data directory.
  2. 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.
  3. 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;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top