今天讲的是关于闹钟(变态闹钟)与notification(通知)的用法,用到的是AlarmManager(闹钟管理者),周期闹钟(am.setRepeating),以及取消周期闹钟(am.cancel),然后通知用到的是(Notification)显示在手机状态栏的通知,
一个
首先来设置一个闹钟(一次)
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 view, 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.gg_android27_camera.RING");
//将来时态的跳转
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();
}
com.example.gg_android27_camera.RING是Avtivity上面的包名;
我这里用到的是一个广播(时间一到,发送广播闹钟响)
要获取闹钟管理者
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
设置一个广播类
@Override
public void onReceive(Context context, Intent intent) {
if("com.example.gg_android27_camera.RING".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);
}
}
设置跳转到的Activity,就是一个播放音乐的类
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ring);
mediaPlayer = MediaPlayer.create(this, R.raw.sa);
mediaPlayer.start();
}
public void stop(View view){
mediaPlayer.stop();
finish();
}
然后记得配置清单文件
这样一来就可以实现闹钟响一次的效果了、
然后就是周期闹钟
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.gg_android27_camera.RING");
//将来时态的跳转 ang eng ing ong
pendingIntent = PendingIntent.getBroadcast(MainActivity.this,0x101,intent,0);
//设置闹钟
// alarmManager.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),pendingIntent);
//设置周期闹钟
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),5000, pendingIntent);
//时间一到,发送广播(闹钟响了)
//广播接受者中(跳转Activity)
// 跳转Activity,在这个Activity中播放音乐
}
},hour,minute,true);
timePickerDialog.show();
}
取消周期闹钟周期
public void cancelCycle(View view){
alarmManager.cancel(pendingIntent);
}
周期闹钟就完成了(也就是变态闹钟)
接下来是通知(Notification)
public void sendNotification(View view){
//实例化通知管理器
NotificationManager notificationManager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
//实例化通知
NotificationCompat.Builder builder=new NotificationCompat.Builder(this);
builder.setContentTitle("今天暴走大事件");
builder.setContentText("王尼玛带你走进偷猪时间!!");
builder.setDefaults(NotificationCompat.DEFAULT_ALL);
builder.setAutoCancel(true);
builder.setSmallIcon(android.R.drawable.ic_media_play);
builder.setContentIntent(PendingIntent.getActivity(this,0x102,new Intent(this,RingActivity.class),0));
Notification notification=builder.build();
//发送通知
notificationManager.notify(0x101,notification);
}
我这里是点击通知就跳转到音乐播放页面
同时你们如需点击进入不同的功能那就自己加其他的方法就好了,我这里就不多说了
PS:今天就大概给大家讲了几个小功能,希望能办的上小伙伴们,其实也没什么难点,闹钟用是AlarmManager触发事件
,这些事件可以在特定的时刻以固定的时间隔发生,然后通知用到的是1.得到通知管理者,2.创建Notification
Notification notify=new Notification.Builder(this);3.为Notification设置各种属性,4.通过通知管理者(NotificationManager)
发送通知(Notification),今天的知识点就讲到这里了, 喜欢的老铁们记得顶一顶.