欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android自定义Notification添加点击事件

程序员文章站 2022-04-11 18:39:20
前言 在上一篇文章中《notification自定义界面》中我们实现了自定义的界面,那么我们该怎么为自定义的界面添加点击事件呢?像酷狗在通知栏 有“上一首”,“下一首”等...

前言

在上一篇文章中《notification自定义界面》中我们实现了自定义的界面,那么我们该怎么为自定义的界面添加点击事件呢?像酷狗在通知栏 有“上一首”,“下一首”等控制按钮,我们需要对按钮的点击事件进行响应,不过方法和之前的点击设置不一样,需要另外处理,下面我将进行简单的说明。

实现

同样,我们需要一个service的子类myservice,然后在myservice的oncreate中设置,如下代码:

public class myservice extends service {

 public static final string onclick = "com.app.onclick";


 private broadcastreceiver receiver_onclick = new broadcastreceiver() {
  @override
  public void onreceive(context context, intent intent) {
   if (intent.getaction().equals(onclick)) {
    vibrator vibrator = (vibrator) getsystemservice(context.vibrator_service);
    vibrator.vibrate(1000);
   }
  }
 };
 @override
 public void oncreate() {
  super.oncreate();
  notification notification = new notification(r.drawable.ic_launcher,
    "jcman", system.currenttimemillis());
  remoteviews view = new remoteviews(getpackagename(),r.layout.notification);
  notification.contentview = view;
  intentfilter filter_click = new intentfilter();
  filter_click.addaction(onclick);
  //注册广播
  registerreceiver(receiver_onclick, filter_click);
  intent intent_pre = new intent(onclick);
  //得到pendingintent
  pendingintent pendintent_click = pendingintent.getbroadcast(this, 0, intent_pre, 0);
  //设置监听
  notification.contentview.setonclickpendingintent(r.id.btn,pendintent_click);
  //前台运行
  startforeground(1, notification);
 }
 @override
 public ibinder onbind(intent intent) {
  return null;
 }
}

可以看到,我们先得到broadcastreceiver的一个对象,然后在onreceiver里面实现我们的操作,我设置成点击时候手机震动一秒钟,当然不要忘记在配置文件添加震动的权限,不然到时候就会出错了。如果对广播没有了解的,那么可以先去了解一下广播的机制,这里我使用的是动态注册广播的方法,还有另外一种方法来注册,不过我更喜欢动态注册的罢了。

小结

看到在notification添加一个progressbar来实现下载的进度提示,这里需要用到更新notification界面的知识,虽然和在activity中更新界面不太一样,但是也不是在复杂,因为我并没有用到这方面的知识,所以这里就不给大家介绍了,有兴趣的可以搜相关的内容。