Android簡易鬧鐘實現
阿新 • • 發佈:2019-01-29
通過廣播來實現鬧鐘
1.建立廣播接收RepeatingAlarm.java
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class RepeatingAlarm extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction()!=null&&intent.getAction().equals("com.gcc.alarm")) {//自定義的action
intent = new Intent(context,AlarmActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}
}
2.廣播在Manifest.xml中配置:
<receiver
android:name=".RepeatingAlarm"
>
<intent-filter >
<action android:name="com.gcc.alarm"/>
</intent-filter>
</receiver>
3.通過程式碼設定一個鬧鐘
Intent intent = new Intent(this, RepeatingAlarm.class);
intent.setAction("com.gcc.alarm" );
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0);
// Schedule the alarm!
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC,
c.getTimeInMillis(), sender);//c為設定鬧鐘的時間的Calendar物件
4.通過程式碼取消一個鬧鐘:
/**
* 取消鬧鐘
*/
private void cancleAlarm(){
Intent intent = new Intent(AlarmActivity.this,RepeatingAlarm.class);
intent.setAction("com.gcc.alarm");
PendingIntent sender = PendingIntent.getBroadcast(AlarmActivity.this, 0, intent, 0);
// And cancel the alarm.
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.cancel(sender);//取消鬧鐘
}
5.鬧鐘響是彈出的對化框並播放音樂用AlarmActivity.java類實現
import android.app.Activity;
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.media.MediaPlayer;
import android.os.Bundle;
public class AlarmActivity extends Activity {
MediaPlayer mp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aty_alarm);
mp = new MediaPlayer();
AssetFileDescriptor file = getResources().openRawResourceFd(R.raw.beep);
try {
mp.setDataSource(file.getFileDescriptor(), file.getStartOffset(),
file.getLength());
mp.prepare();
file.close();
} catch (IOException e) {
e.printStackTrace();
}
mp.setVolume(0.5f, 0.5f);
mp.setLooping(true);
mp.start();
alarmOialog();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mp != null) {
if (mp.isPlaying()) {
mp.stop();
}
mp.release();
}
}
public void alarmOialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("你有未處理的事件");
builder.setPositiveButton("稍後提醒",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
alarm();
finish();
}
});
builder.setNegativeButton("停止", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
cancleAlarm();
finish();// 關閉視窗
}
});
builder.show().setCanceledOnTouchOutside(false);
;
}
/**
* 取消鬧鐘
*/
private void cancleAlarm() {
// Create the same intent, and thus a matching IntentSender, for
// the one that was scheduled.
Intent intent = new Intent(AlarmActivity.this, RepeatingAlarm.class);
intent.setAction("com.gcc.alarm");
PendingIntent sender = PendingIntent.getBroadcast(AlarmActivity.this,
0, intent, 0);
// And cancel the alarm.
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.cancel(sender);
}
private void alarm() {
// 獲取系統的鬧鐘服務
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
// 觸發鬧鐘的時間(毫秒)
long triggerTime = System.currentTimeMillis() + 10000;
Intent intent = new Intent(this, RepeatingAlarm.class);
intent.setAction("com.gcc.alarm");
PendingIntent op = PendingIntent.getBroadcast(this, 0, intent, 0);
// 啟動一次只會執行一次的鬧鐘
am.set(AlarmManager.RTC, triggerTime, op);
// 指定時間重複執行鬧鐘
// am.setRepeating(AlarmManager.RTC,triggerTime,2000,op);
}
}
6.注:
1.aty_alarm.xml為空佈局,不需新增任何元件
2.使用MediaPlayer播放res/raw目錄下音訊檔案的方法如下:
mp = new MediaPlayer();
AssetFileDescriptor file = getResources().openRawResourceFd(R.raw.beep);
try {
mp.setDataSource(file.getFileDescriptor(), file.getStartOffset(),
file.getLength());
7.功能不是很完善,需要的可以修改使用,鬧鐘時間設定可通過上篇博文來獲取Calendar物件。