关于andorid播放内部铃声和震动的简单介绍
手机震动提示
关于Android设备震动的情况有一个内部类 Vibrator
private Vibrator vibrator; //定义一个内部类
将需要播放的文件放置在相关的文件夹下面,例如下面这个我将danger.mp3存放在assets这个文件夹下面
![]()
接下来就是进行代码控制了
bt_getBatter.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
vibrator = (Vibrator)getApplicationContext().getSystemService(VIBRATOR_SERVICE);
// 等待3秒,震动3秒,从第0个索引开始,一直循环
vibrator.vibrate(new long[]{500, 500}, 0);
isvibrator = !isvibrator;
if (isvibrator){ //判断为 boolean值,用户开关播放的
vibrator.cancel();
player.stop();//这个是铃声停止的,先不用看
}else {
playRing();//这个是铃声播放的,暂时不用看
}
}
});
解释下上面的代码
vibrator = (Vibrator)getApplicationContext().getSystemService(VIBRATOR_SERVICE);是指拿到这个可以震动的服务
vibrator.vibrate(new long[]{500, 500}, 0);指的是等待300毫秒,震动300毫秒,一直循环下去,执行到这里,如果设备有这个模块就会间隔性的震动
vibrator.cancel();是停止震动的借口,第二次点击根据判断标志就可以停止震动
手机响铃提示
和设备震动一样,这个也是有系统内部提供的类MediaPlayer
private MediaPlayer playRing() {
try {
player = new MediaPlayer();
assetManager = getAssets();
AssetFileDescriptor fileDescriptor = assetManager.openFd("danger.mp3");
player.setDataSource(fileDescriptor.getFileDescriptor(),fileDescriptor.getStartOffset(),
fileDescriptor.getStartOffset());
player.prepare();
player.start();
} catch (IOException e) {
e.printStackTrace();
}
return player;
}
调用这个方法就是加载资源文件下面的文件资源
player.stop();这个就会停止当前的播放
播放系统自带的,例如电话铃声
public void PlaySound(final Context context) {
Log.e("ee", "正在响铃");
// 使用来电铃声的铃声路径
Uri uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
// 如果为空,才构造,不为空,说明之前有构造过
if(mMediaPlayer == null)
mMediaPlayer = new MediaPlayer();
try {
mMediaPlayer.setDataSource(context, uri);
mMediaPlayer.setLooping(true); //循环播放
mMediaPlayer.prepare();
mMediaPlayer.start();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}