手机闹铃是生活中不可缺少的重要工具,闹铃功能俨然成为手机的标准配备,直接使用手机当做闹铃的人越来越多。
Android的手机也内置了Alarm Clock, Android API中提供了AlarmManager类,可以设置在指定的时间运行某些动作。
本文通过使用AlarmManager 的set()和setRepeating()两个方法实现了两种不同类型的闹铃,一次性闹铃和周期性闹铃,具体代码如下:
1)创建类CallAlarm.java作为自定的BroadcastReceiver,当闹铃的设置时间到时,BroadcastReceiver会被唤起,并运行onReceive()里面的程序,具体代码如下
package com.example.androidapp; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class CallAlarm extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent){ if(intent.getAction().equals("0")){ Toast.makeText(context, "一次性闹铃", Toast.LENGTH_LONG) .show(); }else if(intent.getAction().equals("1")){ Toast.makeText(context, "周期性闹铃", Toast.LENGTH_LONG) .show(); }else{ } } }2)AndroidManifest.xml里面添加CallAlarm的receiver设置,让应用程序在一被启动时,就先注册这个Receiver,具体代码如下
<!-- 注册receiver CallAlarm --> <receiver android:name=".CallAlarm" android:process=":remote"></receiver>3)修改MainActivity.java实现设置(删除)一次性闹铃和周期性闹铃,具体代码如下
package com.example.androidapp; import java.util.Calendar; import android.os.Bundle; import android.os.SystemClock; import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Intent; import android.view.Menu; import android.view.View; import android.widget.Button; public class MainActivity extends Activity { private Calendar calendar=Calendar.getInstance(); private Button button1=null; private Button button2=null; private Button button3=null; private Button button4=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /*设置一次性闹铃*/ button1=(Button)findViewById(R.id.button1); button1.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View arg0) { /*设置一个5s后的时间*/ calendar.setTimeInMillis(System.currentTimeMillis()); calendar.add(Calendar.SECOND, 5); /*5s后跳转到CallAlarm.class*/ Intent intent=new Intent(MainActivity.this,CallAlarm.class); intent.setAction("0"); PendingIntent pendingIntent= PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE); alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); } }); /*删除一次性闹铃*/ button2=(Button)findViewById(R.id.button2); button2.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View arg0) { /*取消Intent必须与启动Intent保持一致才能支持取消*/ Intent intent=new Intent(MainActivity.this,CallAlarm.class); intent.setAction("0"); PendingIntent pendingIntent= PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE); alarmManager.cancel(pendingIntent); } }); /*设置周期性闹铃*/ button3=(Button)findViewById(R.id.button3); button3.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { /*5s一个周期跳转到CallAlarm.class*/ Intent intent=new Intent(MainActivity.this,CallAlarm.class); intent.setAction("1"); PendingIntent pendingIntent= PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE); alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 5*1000, pendingIntent); } }); /*删除周期性闹铃*/ button4=(Button)findViewById(R.id.button4); button4.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { /*取消Intent必须与启动Intent保持一致才能支持取消*/ Intent intent=new Intent(MainActivity.this,CallAlarm.class); intent.setAction("1"); PendingIntent pendingIntent= PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE); alarmManager.cancel(pendingIntent); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }