Android 通知监听服务、NotificationListenerService使用方式(详细步骤

2024-05-13 1094阅读

===============================================================

今天是七夕,深圳又在下雨,庆幸的是单身狗不用出门,苦涩。NotificationListenerService 通知监听服务,就是监听手机上的广播通知,这个在纯App开发中用的比较少,但是在智能穿戴领域用的很多,比如我有一个智能手表,然后有一个配套的App应用,有时候在上班路上,手机放在口袋里,要接受到手机上的通知消息,例如QQ、微信、来电、短信等。智能手表上显示有新消息,如果手表上有屏幕的话,还能显示消息的内容。这就很Nice了不是吗?

先看看效果图:

Android 通知监听服务、NotificationListenerService使用方式(详细步骤

正文

===============================================================

下面进入正式的使用,我先说一下使用的思路,NotificationListenerService 是一个服务,服务更多的是在后台运行,其次由于这个需要进行通知监听,会涉及到一个动态权限请求。第三就是手机上是否安装了微信、QQ等应用。

一、配置项目


新建项目NotifyListenerDemo。

Android 通知监听服务、NotificationListenerService使用方式(详细步骤

主要是项目依赖库的添加,打开工程的build.gradle的repositories{}闭包下添加依赖库:

maven {url “https://jitpack.io”}

然后在app模块的build.gradle中添加依赖:

//简单工具类库

implementation ‘com.github.lilongweidev:EasyLibrary:1.0.4’

然后Sync,同步项目添加依赖库。

二、通知监听服务


创建一个服务,然后将服务注册在AndroidManifest.xml中。创建一个NotifyService类,里面的代码如下:

public class NotifyService extends NotificationListenerService {

public static final String TAG = “NotifyService”;

public static final String QQ = “com.tencent.mobileqq”;//qq信息

public static final String WX = “com.tencent.mm”;//微信信息

public static final String MMS = “com.android.mms”;//短信

public static final String HONOR_MMS= “com.hihonor.mms”;//荣耀短信

public static final String MESSAGES = “com.google.android.apps.messaging”;//信息

public static final String IN_CALL = “com.android.incallui”;//来电 -

/**

  • 发布通知

  • @param sbn 状态栏通知

    */

    @Override

    public void onNotificationPosted(StatusBarNotification sbn) {

    switch (sbn.getPackageName()){

    case MESSAGES:

    case MMS:

    case HONOR_MMS:

    Log.d(TAG,“收到短信”);

    break;

    case QQ:

    Log.d(TAG,“收到QQ消息”);

    break;

    case WX:

    Log.d(TAG,“收到微信消息”);

    break;

    case IN_CALL:

    Log.d(TAG,“收到来电”);

    break;

    default:break;

    }

    }

    /**

    • 通知已删除

    • @param sbn 状态栏通知

      */

      @Override

      public void onNotificationRemoved(StatusBarNotification sbn) {

      switch (sbn.getPackageName()){

      case MESSAGES:

      case MMS:

      case HONOR_MMS:

      Log.d(TAG,“移除短信”);

      break;

      case QQ:

      Log.d(TAG,“移除QQ消息”);

      break;

      case WX:

      Log.d(TAG,“移除微信消息”);

      break;

      case IN_CALL:

      Log.d(TAG,“移除来电”);

      break;

      default:break;

      }

      }

      /**

      • 监听断开

        */

        @Override

        public void onListenerDisconnected() {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

        // 通知侦听器断开连接 - 请求重新绑定

        requestRebind(new ComponentName(this, NotificationListenerService.class));

        }

        }

        }

        这个类继承了NotificationListenerService,里面里面几个方法,都已经注释过了,这里设置通知栏上应用的包名,由于国产厂商对于Android做了定制化,因此各个厂商的系统App软件的包名就不会是一致的,例如我用的是荣耀,那么我监听到的通知短信是com.hihonor.mms,来电是com.android.incallui。这个地方需要开发者自行去适配。不过QQ和微信这种App的包名是固定的,可以放心使用。

        下面将这个服务注册在AndroidManifest.xml中。

        服务配置完成了,下面进行具体的打开服务操作。

        三、打开通知服务监听


        使用这个通知服务其实就是打开一个手机上应用的开关,效果上和打开蓝牙差不多,下面先写一个方法检查当前应用是否开启这个服务。方法代码如下:

        /**

        • 是否启用通知监听服务

        • @return

          */

          public boolean isNLServiceEnabled() {

          Set packageNames = NotificationManagerCompat.getEnabledListenerPackages(this);

          if (packageNames.contains(getPackageName())) {

          return true;

          }

          return false;

          }

          这里还对应一个方法就是设置服务是否运行,如下:

          /**

          • 切换通知监听器服务

          • @param enable

            */

            public void toggleNotificationListenerService() {

            PackageManager pm = getPackageManager();

            pm.setComponentEnabledSetting(new ComponentName(getApplicationContext(), NotifyService.class),

            PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

            pm.setComponentEnabledSetting(new ComponentName(getApplicationContext(), NotifyService.class),

            PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

            }

            现在方法有了需要一个地方去触发,通过按钮来进行,在activity_main.xml添加一个按钮。

            xmlns:app=“http://schemas.android.com/apk/res-auto”

            xmlns:tools=“http://schemas.android.com/tools”

            android:layout_width=“match_parent”

            android:layout_height=“match_parent”

            tools:context=“.MainActivity”>

            在MainActivity中添加一个方法:

            private static final int REQUEST_CODE = 9527;

            /**

            • 请求权限

            • @param view

              */

              public void requestPermission(View view) {

              if (!isNLServiceEnabled()) {

              startActivityForResult(new Intent(“android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS”), REQUEST_CODE);

              } else {

              showMsg(“通知服务已开启”);

              toggleNotificationListenerService(true);

              }

              }

              这个还有一个showMsg方法:

              private void showMsg(String msg) {

              Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();

              }

              然后是页面返回:

              @Override

              protected void onActivityResult(int requestCode, int resultCode, Intent data) {

              super.onActivityResult(requestCode, resultCode, data);

              if (requestCode == REQUEST_CODE) {

              if (isNLServiceEnabled()) {

              showMsg(“通知服务已开启”);

              toggleNotificationListenerService(true);

              } else {

              showMsg(“通知服务未开启”);

              toggleNotificationListenerService(false);

              }

              }

              }

              自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

              深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

              因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

              Android 通知监听服务、NotificationListenerService使用方式(详细步骤

              Android 通知监听服务、NotificationListenerService使用方式(详细步骤

              Android 通知监听服务、NotificationListenerService使用方式(详细步骤

              Android 通知监听服务、NotificationListenerService使用方式(详细步骤

              Android 通知监听服务、NotificationListenerService使用方式(详细步骤

              Android 通知监听服务、NotificationListenerService使用方式(详细步骤

              Android 通知监听服务、NotificationListenerService使用方式(详细步骤

              既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

              由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

              如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)

              Android 通知监听服务、NotificationListenerService使用方式(详细步骤

              最后是今天给大家分享的一些独家干货:

              【Android开发核心知识点笔记】

              Android 通知监听服务、NotificationListenerService使用方式(详细步骤

              【Android思维脑图(技能树)】

              Android 通知监听服务、NotificationListenerService使用方式(详细步骤

              【Android核心高级技术PDF文档,BAT大厂面试真题解析】

              Android 通知监听服务、NotificationListenerService使用方式(详细步骤

              【Android高级架构视频学习资源】

              本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

              一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

              AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

              】**

              [外链图片转存中…(img-B9vNi066-1712102350952)]

              【Android核心高级技术PDF文档,BAT大厂面试真题解析】

              [外链图片转存中…(img-0fmJ90gt-1712102350952)]

              【Android高级架构视频学习资源】

              本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

              一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

              AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]