开发者

How to play mp3 file in raw folder as notification sound alert in android

开发者 https://www.devze.com 2023-03-15 15:06 出处:网络
I am having my own audio file placed in raw folder inside resource folder.I want to set it as notification sound alert. h开发者_如何学Cow should i proceedPlease used below code when you get notificati

I am having my own audio file placed in raw folder inside resource folder.I want to set it as notification sound alert. h开发者_如何学Cow should i proceed


Please used below code when you get notification in BroadcastReceiver then call activity in that activity class used below code so play sound file.

mMediaPlayer = MediaPlayer.create(this, R.raw.sound1);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.setLooping(true);
mMediaPlayer.start();

Happy Coding..


This is often achieved using the MediaPlayer but that is not an ideal solution because it runs a little independently of notifications, and therefore will behave in unexpected ways for muting, blocking mode, and various other things. For consistency and compatibility, the sound should be played using the audio mechanism of notifications themselves. This can be accomplished by setting an appropriate URI, along the lines of:

NotificationCompat.Builder builder = new NotificationCompat.Builder(
    this).setSmallIcon(R.drawable.ic_myicon)
    .setContentTitle(title).setAutoCancel(true);
Uri alarmSound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE
                    + "://" + getPackageName() + "/raw/mymp3");
builder.setSound(alarmSound);
...
builder.setContentIntent(pendingIntent);
NotificationManager manager = (NotificationManager)
    getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(1, builder.build());

The key part is:

Uri alarmSound = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE
                    + "://" + getPackageName() + "/raw/mymp3");

The mp3 file is stored in your /res/raw folder.


try this code

notification.sound =Uri.parse("android.resource://" + getPackageName() + "Name OF audio store in raw folder");


Refer the code

 Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); 
 mMediaPlayer = new MediaPlayer();
 mMediaPlayer.setDataSource(this, alert);
 final AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
 if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0) {
            player.setAudioStreamType(AudioManager.STREAM_ALARM);
            player.setLooping(true);
            player.prepare();
            player.start();
  }


You can add a sound using

notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");

go through http://developer.android.com/guide/topics/ui/notifiers/notifications.html


You can play sound from raw folder below is java file just copy paste this code implement it and use just that class's function it will play sound with loud music and with vibrate .......

if you want to vibrate also then you have to add permission

    <uses-permission android:name="android.permission.VIBRATE"/>

Create BeepManager.java file and copy paste below code

import java.io.IOException;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.AssetFileDescriptor;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Vibrator;
import android.preference.PreferenceManager;
import android.util.Log;

final class BeepManager {

 private static final String TAG = BeepManager.class.getSimpleName();
 private static final float BEEP_VOLUME = 0.10f;
 private static final long VIBRATE_DURATION = 200L;
 private final Activity activity;
 private MediaPlayer mediaPlayer;
 private boolean playBeep;
 private boolean vibrate;

BeepManager(Activity activity) {
 this.activity = activity;
 this.mediaPlayer = null;
 updatePrefs();
}

void updatePrefs() {
 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
 playBeep = shouldBeep(prefs, activity);
 vibrate = prefs.getBoolean(PreferencesActivity.KEY_VIBRATE, false);
 if (playBeep && mediaPlayer == null) {
  // The volume on STREAM_SYSTEM is not adjustable, and users found it too loud,
  // so we now play on the music stream.
   activity.setVolumeControlStream(AudioManager.STREAM_MUSIC);
   mediaPlayer = buildMediaPlayer(activity);
 }
}

void playBeepSoundAndVibrate() {
 if (playBeep && mediaPlayer != null) {
     mediaPlayer.start();
  }
  if (vibrate) {
   Vibrator vibrator = (Vibrator) activity.getSystemService(Context.VIBRATOR_SERVICE);
   vibrator.vibrate(VIBRATE_DURATION);
  }
}

 private static boolean shouldBeep(SharedPreferences prefs, Context activity) {
   boolean shouldPlayBeep = prefs.getBoolean(PreferencesActivity.KEY_PLAY_BEEP, true);
  if (shouldPlayBeep) {
    // See if sound settings overrides this
    AudioManager audioService = (AudioManager) activity.getSystemService(Context.AUDIO_SERVICE);
    if (audioService.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) {
       shouldPlayBeep = false;
    }
  }
  return shouldPlayBeep;
}

private static MediaPlayer buildMediaPlayer(Context activity) {
  MediaPlayer mediaPlayer = new MediaPlayer();
  mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
  // When the beep has finished playing, rewind to queue up another one.
  mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
   @Override
   public void onCompletion(MediaPlayer player) {
     player.seekTo(0);
   }
 });

 AssetFileDescriptor file = activity.getResources().openRawResourceFd(R.raw.beep);
 try {
  mediaPlayer.setDataSource(file.getFileDescriptor(), file.getStartOffset(), file.getLength());
  file.close();
  mediaPlayer.setVolume(BEEP_VOLUME, BEEP_VOLUME);
  mediaPlayer.prepare();
 } catch (IOException ioe) {
  Log.w(TAG, ioe);
  mediaPlayer = null;
 }
 return mediaPlayer;
}
}

Now just use following function you can play sound............

 BeepManager beepManager = new BeepManager(this);
 beepManager.updatePrefs();



 beepManager.playBeepSoundAndVibrate(); 


When you set the sound in the notification message you should parse the Uri of raw file from /res/raw folder, so we do something like this:

.setSound(Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + getPackageName() + "/raw/notice"))
0

精彩评论

暂无评论...
验证码 换一张
取 消