繁体   English   中英

如何在原始文件夹中播放mp3文件作为android中的通知声音警报

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

我将自己的音频文件放在资源文件夹内的原始文件夹中。我想将其设置为通知声音警报。 我该怎么办?

当您在BroadcastReceiver中收到通知时,请使用下面的代码,然后在代码下方使用的活动类中调用活动,以便播放声音文件。

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

快乐编码..

这通常是使用MediaPlayer实现的,但这不是一个理想的解决方案,因为它独立于通知运行一点,因此会以意想不到的方式表现静音,阻塞模式和其他各种事情。 为了保持一致性和兼容性,应使用通知本身的音频机制播放声音。 这可以通过设置适当的URI来实现,其方式如下:

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());

关键部分是:

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

mp3文件存储在/ res / raw文件夹中。

试试这段代码

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

参考代码

 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();
  }

您可以使用添加声音

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

请浏览http://developer.android.com/guide/topics/ui/notifiers/notifications.html

你可以从原始文件夹播放声音下面是java文件只是复制粘贴这个代码实现它并使用该类的功能它将播放声音与嘈杂的音乐和振动.......

如果你想振动,那么你必须添加权限

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

创建BeepManager.java文件并在代码下面复制粘贴

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;
}
}

现在只需使用以下功能即可播放声音............

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



 beepManager.playBeepSoundAndVibrate(); 

当您在通知消息中设置声音时,您应该从/ res / raw文件夹解析原始文件的Uri,因此我们执行以下操作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM