關於andorid播放內部鈴聲和震動的簡單介紹
阿新 • • 發佈:2019-01-23
手機震動提示
關於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();
}
}