欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android?NotificationListenerService通知監(jiān)聽服務(wù)使用

 更新時(shí)間:2022年11月18日 10:15:12   作者:黃林晴-阿黃哥  
這篇文章主要為大家介紹了Android?NotificationListenerService通知監(jiān)聽服務(wù)使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

本篇我們將介紹如何利用NotificationListenerService實(shí)現(xiàn)類似智能手表通知同步、微信自動(dòng)搶紅包等功能。實(shí)現(xiàn)這些功能的原理其實(shí)就是監(jiān)聽系統(tǒng)的通知服務(wù),接下來我們來看該如何實(shí)現(xiàn)。

NotificationListenerService的使用

創(chuàng)建NotificationListenerService

在Android中如果我們想要監(jiān)聽系統(tǒng)的通知,就需要實(shí)現(xiàn)一個(gè)服務(wù),繼承自NotificationListenerService,新建NotificationMonitorService類,代碼如下所示。

class NotificationMonitorService : NotificationListenerService() {
    //收到通知時(shí)的回調(diào)
    override fun onNotificationPosted(sbn: StatusBarNotification) {
        super.onNotificationPosted(sbn)
    }
 
    //通知移除時(shí)的回調(diào)
    override fun onNotificationRemoved(sbn: StatusBarNotification?) {
        super.onNotificationRemoved(sbn)
    }
}

這里我們重寫onNotificationPosted方法和onNotificationRemoved方法,這兩個(gè)方法分別會(huì)在收到通知和通知被移除時(shí)調(diào)用。這里我們著重來看onNotificationPosted方法。

在onNotificationPosted方法中有一個(gè)StatusBarNotification實(shí)例,通過這個(gè)實(shí)例我們可以獲取通知消息的包名、內(nèi)容等。代碼如下所示。

class NotificationMonitorService : NotificationListenerService() {
    override fun onNotificationPosted(sbn: StatusBarNotification) {
        super.onNotificationPosted(sbn)
        val extras = sbn.notification.extras
        // 獲取接收消息APP的包名
        val notificationPkg = sbn.packageName
        // 獲取接收消息的抬頭
        val notificationTitle = extras.getString(Notification.EXTRA_TITLE)
        // 獲取接收消息的內(nèi)容
        val notificationText = extras.getString(Notification.EXTRA_TEXT)
        Log.d("收到的消息內(nèi)容包名:", notificationPkg)
        Log.d("收到的消息內(nèi)容", "Notification posted $notificationTitle & $notificationText")
    }
}

然后記得在配置文件中添加這個(gè)Service的聲明,代碼如下所示。

<service android:name="com.example.myapplication.NotificationMonitorService"
    android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"
    android:exported="true">
    <intent-filter>
        <action android:name="android.service.notification.NotificationListenerService" />
    </intent-filter>
</service>

創(chuàng)建好NotificationMonitorService之后,接下來我們就可以啟動(dòng)這個(gè)服務(wù)了。

啟動(dòng)服務(wù)

現(xiàn)在直接啟動(dòng)服務(wù),肯定是沒辦法監(jiān)聽到系統(tǒng)通知的,在啟動(dòng)服務(wù)前,我們應(yīng)該授予App監(jiān)聽系統(tǒng)通知的權(quán)限。

在AndroidManifest.xml中添加權(quán)限,代碼如下所示。

 <uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"/>

啟動(dòng)服務(wù)前判斷是否開啟了監(jiān)聽通知的權(quán)限,如果沒有則跳轉(zhuǎn)到設(shè)置頁開啟,代碼如下所示。

if (NotificationManagerCompat.getEnabledListenerPackages(this).contains(packageName)){
    val intent = Intent(this,NotificationMonitorService::class.java)
    startService(intent)
 }else{
    startActivity(Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"))
 }

如果沒有開啟,跳轉(zhuǎn)到的設(shè)置頁如下所示。

開啟了監(jiān)聽通知權(quán)限,運(yùn)行程序,打印日志如下所示。

 對應(yīng)的打印日志是,收到了來自微信的群聊消息,發(fā)了一個(gè)“強(qiáng)”。

當(dāng)收到短信、來電等消息時(shí),系統(tǒng)同樣會(huì)發(fā)送一個(gè)通知,我們可以根據(jù)收到的通知處理不同的業(yè)務(wù)。這里感興趣的讀者可自行嘗試。接著我們來模擬實(shí)現(xiàn)自動(dòng)搶紅包的功能。

實(shí)現(xiàn)自動(dòng)搶紅包功能

這里為了測試,歷盡千辛萬苦讓我老婆給我發(fā)了一個(gè)0.01的紅包,我們監(jiān)聽到的內(nèi)容為“[微信紅包]恭喜發(fā)財(cái),大吉大利”。如下圖所示。

 所以我們可以在收到消息時(shí),通過監(jiān)聽微信包名、以及消息內(nèi)容來判斷是否收到了微信紅包來處理具體的操作。(不處理,別人故意發(fā)同樣的文字)。

if (notificationPkg.equals("com.tencent.mm")){
   if (notificationText.equals("[微信紅包]恭喜發(fā)財(cái),大吉大利")){
      //收到微信紅包了
   }
}

這樣我們只需要在代碼處處理接下來的操作就可以了。其實(shí)我們的操作也很簡單,只需要在監(jiān)聽到有紅包時(shí)打開對應(yīng)的微信頁面即可,代碼如下所示。

class NotificationMonitorService : NotificationListenerService() {
    override fun onNotificationPosted(sbn: StatusBarNotification) {
        super.onNotificationPosted(sbn)
        val extras = sbn.notification.extras
        // 獲取接收消息APP的包名
        val notificationPkg = sbn.packageName
        // 獲取接收消息的內(nèi)容
        val notificationText = extras.getString(Notification.EXTRA_TEXT)
        if (notificationPkg.equals("com.tencent.mm")){
            if (notificationText.equals("[微信紅包]恭喜發(fā)財(cái),大吉大利")){
                //收到微信紅包了
                val intent = sbn.notification.contentIntent
                intent.send()
            }
        }
    }
}

這里我們直接通過sbn拿到notification的intent,進(jìn)行intent.send操作即可,運(yùn)行程序,收到紅包后,頁面將自動(dòng)跳轉(zhuǎn)到微信紅包頁面,結(jié)果如下圖所示。

最后

利用通知監(jiān)聽服務(wù)這一功能,我們可以實(shí)現(xiàn)許多諸如 智能手表的消息同步、微信搶紅包等功能,如果你有需要,也可以讓你女朋友的消息立即彈出,這樣就再也不用跪搓衣板啦~

以上就是Android NotificationListenerService通知監(jiān)聽服務(wù)使用的詳細(xì)內(nèi)容,更多關(guān)于Android NotificationListenerService的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論