Android简易闹钟实现

来源:互联网 发布:怎么开发app软件 编辑:程序博客网 时间:2024/05/16 23:40

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

0 0
原创粉丝点击