Android 实现一次性闹钟和周期性闹钟

来源:互联网 发布:翼支付显示网络异常 编辑:程序博客网 时间:2024/04/30 03:48

平时我们能够早早的起床,全靠一个起床神器,“闹钟”,而且有的闹钟就是变态型的,现在我就写一个简单的闹钟吧!
一、一次性闹钟:指的是在你预期定好的时间的时候闹钟开始响,注意定闹钟时间只能是当前时间之后。
1、写一个简单的按钮,写一个事件setAlarm

<Button        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="设置闹钟(一次)"        android:onClick="setAlarm"        />

2、接下来就要实现这个功能了,同时在onCreate方法中得到闹钟管理者

//获取闹钟管理者  alarmManager =(AlarmManager)getSystemService(Context.ALARM_SERVICE);   
public void setAlarm(View view){        //获取当前系统的时间        Calendar calendar=Calendar.getInstance();        int hour=calendar.get(Calendar.HOUR_OF_DAY);        int minute=calendar.get(Calendar.MINUTE);        //弹出时间对话框        TimePickerDialog timePickerDialog=new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {            @Override            public void onTimeSet(TimePicker timePicker, int i, int i1) {                Calendar c=Calendar.getInstance();                c.set(Calendar.HOUR_OF_DAY,i);                c.set(Calendar.MINUTE,i1);                Intent intent=new Intent();                intent.setAction("com.example.cloakandnotifaction.shuting");                //将来时态的跳转                PendingIntent pendingIntent=PendingIntent.getBroadcast(MainActivity.this,0x101,intent,0);                //设置闹钟                alarmManager.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),pendingIntent);                //时间一到,发送广播(闹钟响了)//广播接受者中(跳转Activity)// 跳转Activity,在这个Activity中播放音乐            }        },hour,minute,true);        **timePickerDialog.show();**    }

3、当设置的时间到了的时候,跳转一个Activity,同时播放闹钟音乐

 <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="咯咯咯、咯咯咯、该起床了!!!"        android:textSize="30sp"        />    <Button        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="停止"        android:onClick="stop"        />

4、接收广播

public class RingReceived extends BroadcastReceiver {    @Override    public void onReceive(Context context, Intent intent) {        if("com.example.cloakandnotifaction.shuting".equals(intent.getAction())){            Log.i("test","闹钟作死的响了。。");            //跳转到Activity            Intent intent1=new Intent(context,RingActivity.class);            //给Intent设置标志位            intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);            context.startActivity(intent1);        }    }

5、实现播放闹钟音乐的功能

private MediaPlayer mediaPlayer;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_ring);        mediaPlayer = MediaPlayer.create(this, R.raw.rooster);        mediaPlayer.start();    }    public void stop(View view){        mediaPlayer.stop();        finish();    }

6、再次涉及到了广播,所以要在清单文件里配置

**<receiver android:name=".RingReceived">                <intent-filter>                    <action android:name="com.example.cloakandnotifaction.shuting"></action>                </intent-filter>            </receiver>**

二、周期性闹钟和一次性闹钟差不多,多了一个long类型的参数

public void setAlarmCycle(View view){        //获取当前系统的时间        Calendar calendar=Calendar.getInstance();        int hour=calendar.get(Calendar.HOUR_OF_DAY);        int minute=calendar.get(Calendar.MINUTE);        //弹出时间对话框        TimePickerDialog timePickerDialog=new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {            @Override            public void onTimeSet(TimePicker timePicker, int i, int i1) {                Calendar c=Calendar.getInstance();                c.set(Calendar.HOUR_OF_DAY,i);                c.set(Calendar.MINUTE,i1);                Intent intent=new Intent();                intent.setAction("com.example.cloakandnotifaction.shuting");                //将来时态的跳转  ang eng ing ong                pendingIntent = PendingIntent.getBroadcast(MainActivity.this,0x101,intent,0);                //设置周期闹钟                alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),5000, pendingIntent);                //时间一到,发送广播(闹钟响了)                //广播接受者中(跳转Activity)                // 跳转Activity,在这个Activity中播放音乐            }        },hour,minute,true);        timePickerDialog.show();    }

这样就可以实现一个简单闹钟了,喜欢睡懒觉的同志们可以自己写一个,天天叫自己起床了哦!

2 0