android闹钟实战

我们可能会在app中有这样的需求,就是做一个定时提醒的功能,比如比赛直播设置定时提醒这类需要,下面分享之前项目中一些关于这方面的经验。

首先在设置提醒之前你需要一个入口,比如说onclick事件中,在此不做赘述。

android中使用闹钟进行提醒其实非常简单,你只需要告知系统你想在什么时候被提醒,然后需要一个闹钟的广播接收器,当到你设置的时间时,系统会给你发送一条广播,当你接收到广播后你就可以做一些操作,比如启动你的app,或者跳转到你app中的任何一个界面。废话不多少,直接上代码。

//发送闹钟请求
Intent intent =  new  Intent(mContext, AlarmReceiver. class );
intent.setAction( "something" );
intent.setType( "something" );
intent.setData(Uri.EMPTY);
intent.addCategory(“something”);
intent.setClass(context, AlarmReceiver. class );
// 以上给intent设置的四个属性是用来区分你发给系统的闹钟请求的,当你想取消掉之前发的闹钟请求,这四个属性,必须严格相等,所以你需要一些比较独特的属性,比如服务器返回给你的json中某些特定字段。
//当然intent中也可以放一些你要传递的消息。
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, alarmCount, intent,  0 );
//alarmCount是你需要记录的闹钟数量,必须保证你所发的alarmCount不能相同,最后一个参数填0就可以。
AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, time, pendingIntent);
//这样闹钟的请求就发送出去了。time是你要被提醒的时间,单位毫秒,注意不是时间差。第一个参数提醒的需求用我给出的就可以,感兴趣的朋友,可以去google一下,这方面的资料非常多,一共有种,看一下就知道区别了。
//取消闹钟请求
Intent intent =  new  Intent(mContext, AlarmReceiver. class );
intent.setAction( "something" );
intent.setType(something);
intent.setData(Uri.EMPTY);
intent.addCategory(something);
intent.setClass(context, AlarmReceiver. class );
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, alarmCount, intent,  0 );
//alarmCount对应到你设定时的alarmCount,
AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
am.cancel(pendingIntent);
//接着,你需要一个广播接收的类:
public  class  AlarmReceiver  extends  BroadcastReceiver{
 
     private  NotificationManager manager;
     
     @Override
     public  void  onReceive(Context context, Intent intent) {
         manager = (NotificationManager)context.getSystemService(android.content.Context.NOTIFICATION_SERVICE);
         //例如这个id就是你传过来的
         String id = intent.getStringExtra( "id" );
                 //MainActivity是你点击通知时想要跳转的Activity
         Intent playIntent =  new  Intent(context, MainActivity. class );
         playIntent.putExtra( "id" , id);
         PendingIntent pendingIntent = PendingIntent.getActivity(context,  1 , playIntent, PendingIntent.FLAG_UPDATE_CURRENT);
         NotificationCompat.Builder builder =  new  NotificationCompat.Builder(context);
         builder.setContentTitle( "title" ).setContentText( "提醒内容" ).setSmallIcon(R.drawable.app_icon).setDefaults(Notification.DEFAULT_ALL).setContentIntent(pendingIntent).setAutoCancel( true ).setSubText( "二级text" );
         manager.notify( 1 , builder.build());
     }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序邦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值