美文网首页
实现微信弹窗回复和自动回复

实现微信弹窗回复和自动回复

作者: 十步杀一人_千里不留行 | 来源:发表于2021-12-09 17:17 被阅读0次

    主要技术点

    1. 打开Android auto模式;
    2. 利用通知使用权限拿到Notification,调用post方法。

    源代码GitHub地址:https://github.com/showon/CoolPopup

    第一步:如何用代码打开Android auto模式呢?又不能弹出提醒被用户感知到。

    fun open(b: Boolean) {
            val uiManager = getSystemService(UI_MODE_SERVICE) as UiModeManager
            if (b) {
                uiManager.enableCarMode(UiModeManager.MODE_NIGHT_AUTO)
                Toast.makeText(this, "开启了", Toast.LENGTH_SHORT).show()
            } else {
                uiManager.disableCarMode(UiModeManager.DISABLE_CAR_MODE_GO_HOME)
                Toast.makeText(this, "关闭了", Toast.LENGTH_SHORT).show()
            }
            Handler(Looper.getMainLooper())
                .postDelayed({
                    startActivity(Intent(this, MainActivity::class.java))
                }, 1000)
            finish()
        }
    

    就是这么简单就可以无声无息打开Android auto模式;
    但是有个前提,很多国产手机都阉割了,并没有安装Android Auto包。也不要紧,只要自己做一个空包安装就可以,开启自动驾驶模式只检测有无包名。

    Android Auto的包名:applicationId "com.google.android.projection.gearhead"
    做一个空包,桌面没有图标。

    比如市场上有一些悬浮菜单、女娲石之类的app,好几十块钱开一个月会员,才能使用这个功能。其实就没几行代码。

    第二步:如何知道微信来消息了。

    class NotificationService : NotificationListenerService() {
        //  继承这个类就可以,开启通知使用权限。
    }
    
     <!--通知栏权限-->
            <service
                android:name=".NotificationService"
                android:exported="true"
                android:label="@string/app_name"
                android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
                <intent-filter>
                    <action android:name="android.service.notification.NotificationListenerService" />
                </intent-filter>
            </service>
    
    /**
    这是接收消息的回掉,这里可以处理所有的消息。
    */
        override fun onNotificationPosted(sbn: StatusBarNotification) {
            getNotifyData(sbn)
            val packageName = sbn.packageName
            LogUtils.i("packageName: $packageName")
            val notification = sbn.notification
            LogUtils.i("NLService: " + notification.tickerText)
            if (sbn.notification.actions != null) {
                LogUtils.v("NLService: " + sbn.notification.actions.size)
                for (action in sbn.notification.actions) {
                    LogUtils.v("onNotificationPosted: " + action.title.toString())
                    if (action.title.toString().equals("Answer", ignoreCase = true)) {
                        val intent = action.actionIntent
                        try {
                            intent.send()
                        } catch (e: CanceledException) {
                            e.printStackTrace()
                        }
                    }
                }
            }
        }
    
    

    我们能够拿到通知消息,能够使用,也能够取消关闭它,所以自己还可以做一个消息样式。
    举例说明:某app来了一条消息,你取消它,拿到消息体和intent,自己迅速弹出来一个消息。此消息的花样可以自己定义,比如各种背景花色,各种提示音。


    image image

    第三步:监听到了消息,如何发送一个文本出去呢?

        /**
         * 自动回复微信消息的方法。可以使用在任意位置。
         */
        fun send(sbn: StatusBarNotification) {
            val notification: Notification = sbn.notification
            val mCarExtender: NotificationCompat.CarExtender =
                NotificationCompat.CarExtender(notification)
            val conversation: NotificationCompat.CarExtender.UnreadConversation =
                mCarExtender.unreadConversation!!
            val pendingReply: PendingIntent = conversation.replyPendingIntent!!
            val remoteInput: RemoteInput = conversation.remoteInput!!
            val key = remoteInput.resultKey
            val localIntent = Intent()
            val resultBundle = Bundle()
            resultBundle.putString(key, "自动回复的内容[$]")
            RemoteInput.addResultsToIntent(
                arrayOf(RemoteInput.Builder(key).build()),
                localIntent,
                resultBundle
            )
            try {
                pendingReply.send(this@MainActivity, 0, localIntent)
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }
    
    

    这样就可以搞定了。。
    比如正在看小说的时候,弹出一个微信聊天窗口,输入消息发送出去。
    比如正在购物的时候,来消息了,弹出一个微信窗口,输入消息发送出去。
    只要你想象力够丰富,可以用在任意场景,如果在任意位置弹窗,需要再做一个悬浮窗。
    当前也可以设置一条自动回复消息,有人给你发消息,就自动回复:机主正在忙,上后回复……

    还可以做各种炫酷的通知样式,再也不需要为了这点小小的功能去花几十大洋了。。

    image

    源代码GitHub地址:https://github.com/showon/CoolPopup

    相关文章

      网友评论

          本文标题:实现微信弹窗回复和自动回复

          本文链接:https://www.haomeiwen.com/subject/ybiffrtx.html