通过广播来实现闹钟
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对象。

更多相关文章

  1. Android(安卓)简易对话框
  2. Android(安卓)时间滚轴
  3. android 自定义View 对话框
  4. [置顶] android 捕捉异常
  5. 闹铃设置
  6. Android:HttpURLConnection使用,Tomcat的Servlet
  7. android判断网络是否能用
  8. ch07 Android(安卓)日期与时间对话框
  9. ch07 Android(安卓)日期与时间对话框

随机推荐

  1. Android(安卓)Native Crash崩溃及错误原
  2. android技术分析
  3. Android开发中TextView文本过长滚动显示
  4. Android——初识OpenGL ES 2.0
  5. RestHttp
  6. android 按钮自定义
  7. Android开发周刊 第四期
  8. 【AS基础篇二:线性布局和相对布局的使用】
  9. 安卓 Android之开发简单小应用(一)
  10. Android联系人表结