首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在安卓系统中播放raw文件夹中的mp3文件作为通知声音提示

如何在安卓系统中播放raw文件夹中的mp3文件作为通知声音提示
EN

Stack Overflow用户
提问于 2011-06-24 14:08:14
回答 7查看 29.8K关注 0票数 13

我将自己的音频文件放在resource文件夹中的raw文件夹中。我想将其设置为通知声音警报。我该如何继续呢?

EN

Stack Overflow用户

发布于 2012-10-19 14:30:07

你可以播放原始文件夹下面的java文件中的声音,只需复制粘贴此代码,实现它,并使用该类的函数,它将播放声音与响亮的音乐和振动......

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

代码语言:javascript
复制
    <uses-permission android:name="android.permission.VIBRATE"/>

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

代码语言:javascript
复制
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;
}
}

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

代码语言:javascript
复制
 BeepManager beepManager = new BeepManager(this);
 beepManager.updatePrefs();



 beepManager.playBeepSoundAndVibrate(); 
票数 0
EN
查看全部 7 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6464080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档