Skip to content
This repository has been archived by the owner on Dec 29, 2024. It is now read-only.

Log按钮页面空白,检查服务是否启动的方式 #28

Closed
gychg opened this issue Jun 9, 2019 · 28 comments
Closed

Log按钮页面空白,检查服务是否启动的方式 #28

gychg opened this issue Jun 9, 2019 · 28 comments

Comments

@gychg
Copy link

gychg commented Jun 9, 2019

OPPO R9sk无法接收推送
其他OPPO型号未测试
小米4测试可接收

@gychg
Copy link
Author

gychg commented Jun 9, 2019

点击Log按钮都是空白页面
已给通知获取权限

@WeihuaGu
Copy link
Collaborator

WeihuaGu commented Jun 9, 2019

无法接受推送的那个,你能把安卓的日志搞上来不,用adb logcat。

@WeihuaGu
Copy link
Collaborator

有NLService tag标签的只出现了一次,我却没有发现任何报错。是不是两个服务都没启动被杀了,正在运行的服务有receiptnotice的NLService和NotificationCollectorMonitorService吗

06-10 10:28:49.733 D/NLService( 3038): once socketio timer task run
06-10 10:28:49.734 D/NLService( 3038): socketio timer task not have a server

@gychg
Copy link
Author

gychg commented Jun 10, 2019

NotificationCollectorMonitorService这个是有的,另一个没找到应该是没有

@gychg
Copy link
Author

gychg commented Jun 10, 2019

自启动,电池白名单都加了的。

@WeihuaGu
Copy link
Collaborator

设置, 停止应用,然后再看下有没有。这个服务没有的化,就监听不了通知栏的。

@gychg
Copy link
Author

gychg commented Jun 11, 2019

还是不行,这个服务没启动到

@WeihuaGu
Copy link
Collaborator

是这样的,当你在设置点击停止应用后,NotificationCollectorMonitorService会重新启用,然后在它的onCreate()方法中调用ensureCollectorRunning();这个ensureCollectorRunning是用来检查NLSerice服务是否正常在运行,它的函数如下:

private void ensureCollectorRunning() {
                ComponentName collectorComponent = new ComponentName(this, /*NotificationListenerService Inheritance*/ NLService.class);
                Log.v(TAG, "ensureCollectorRunning collectorComponent: " + collectorComponent);
                ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
                boolean collectorRunning = false;
                List<ActivityManager.RunningServiceInfo> runningServices = manager.getRunningServices(Integer.MAX_VALUE);
                if (runningServices == null ) {
                        Log.w(TAG, "ensureCollectorRunning() runningServices is NULL");
                        return;
                }
                for (ActivityManager.RunningServiceInfo service : runningServices) {
                        if (service.service.equals(collectorComponent)) {
                                Log.w(TAG, "ensureCollectorRunning service - pid: " + service.pid + ", currentPID: " + Process.myPid() + ", clientPackage: " + service.clientPackage + ", clientCount: " + service.clientCount
                                                + ", clientLabel: " + ((service.clientLabel == 0) ? "0" : "(" + getResources().getString(service.clientLabel) + ")"));
                                if (service.pid == Process.myPid() /*&& service.clientCount > 0 && !TextUtils.isEmpty(service.clientPackage)*/) {
                                        collectorRunning = true;
                                }
                        }
                }
                if (collectorRunning) {
                        Log.d(TAG, "ensureCollectorRunning: collector is running");
                        return;
                }
                Log.d(TAG, "ensureCollectorRunning: collector not running, reviving...");
                toggleNotificationListenerService();
        }

@WeihuaGu
Copy link
Collaborator

WeihuaGu commented Jun 12, 2019

所以在点击停止后,使用"NotifiCollectorMonitor" 标签过滤logcat.看看后面是:

  • "ensureCollectorRunning() runningServices is NULL"
  • "ensureCollectorRunning: collector is running
  • "ensureCollectorRunning: collector not running, reviving..."

如果是"ensureCollectorRunning() runningServices is NULL"说明getRunningServices没能正确获取到正在运行的服务列表所以会直接退出。
如果是"ensureCollectorRunning: collector not running, reviving..."
接着上面的函数会调用toggleNotificationListenerService()。他会先打印日志"toggleNotificationListenerService() called"然后真正的启动NLService服务。

观察日志,然后最好能看到错误,也许就好办了。我手头实在是没有OPPO的手机……

@WeihuaGu
Copy link
Collaborator

WeihuaGu commented Jun 12, 2019

我想服务启动不起来,无非可能有三点。

  • getRunningServices(Integer.MAX_VALUE)就没有正确获取到现在所有正在运行的服务,所以ensureCollectorRunning() runningServices is NULL直接退出。

  • 使用 pm.setComponentEnabledSetting disable 再 enable 重启服务的方式在oppo上没有奏效

  • 或者NLService在重启过程中,绑定失败。

@gychg
Copy link
Author

gychg commented Jun 13, 2019

现在两个服务都启动的,但是日志界面还是没有内容。
安卓版本:7.1.1

@WeihuaGu
Copy link
Collaborator

日志界面依靠的是执行系统调用,不知道为啥OPPO看不成。但按道理,这个日志界面不显示,也应该不影响推送。现在推送有问题,就只能用adb logcat 来看日志了。

@WeihuaGu
Copy link
Collaborator

一是服务启动时的logcat,二是是否进行了推送,是出错了,还是NLService 出问题,根本就没推送。这些都要看logcat 的日志才能知道

@gychg
Copy link
Author

gychg commented Jun 13, 2019

我再次测试,查看了通知,发现是有推送记录。目前是NLService 没有显示

@WeihuaGu
Copy link
Collaborator

有推送记录?是logcat 的里的还是设置里的那个

@WeihuaGu
Copy link
Collaborator

截下图,logcat 里会有post 的记录,post了什么,成功与否。

@WeihuaGu
Copy link
Collaborator

从日志看,先是你点击停止,或者系统强行停止两服务后,NLService监听断开,接着,NLService disable 后 enable 启动起来成功绑定了监听

再然后,NLservice正常打印了日志。因为安卓是Linux,所以这里你看的中文是乱码,但是没事,安卓本身的应该正常。

@WeihuaGu
Copy link
Collaborator

现在看,确实正常了,你可以测试下推送是否正常

@gychg
Copy link
Author

gychg commented Jun 27, 2019

推送正常了,应该是没有自启动权限导致的。通过oppo自带手机管家重新开启有推送。但是日志界面不显示.内容

@WeihuaGu WeihuaGu changed the title OPPO R9sk无法接收推送 Log按钮页面空白,检查服务是否启动的方式 Jun 27, 2019
@WeihuaGu WeihuaGu pinned this issue Jun 27, 2019
@WeihuaGu
Copy link
Collaborator

@gychg 这个问题挺典型的,log页面空白,怎么判断服务是不是正常启动起来的。所以我把这个问题pin在了问题的首页,你要是烦,比如有人再在这个下面问,或者发,我就重开个issue,关掉这个。你要不烦,我就不麻烦重开一个了。

@c-kzxvldkhX c-kzxvldkhX deleted a comment from gychg Jun 27, 2019
@c-kzxvldkhX c-kzxvldkhX deleted a comment from gychg Jun 27, 2019
@gychg
Copy link
Author

gychg commented Jun 28, 2019

没事。不过建议日志不需要实时显示,发现实时显示不及时以及采集可能不太稳定。

@WeihuaGu
Copy link
Collaborator

基本上看设置里的推送日志就行了,这个是为了查看正常与否,本身用adb logcat来看更好,这个只是为了方便临时看的。

@hanliux
Copy link

hanliux commented Jul 18, 2019

vivo 也不行
06-10 10:28:49.733 D/NLService( 3038): once socketio timer task run
06-10 10:28:49.734 D/NLService( 3038): socketio timer task not have a server

log上就这么两个消息。没其它信息。

@WeihuaGu
Copy link
Collaborator

@hanliux 没有其它说明NLService这个服务应该是被杀了,这个服务是监控通知栏的。

@hanliux
Copy link

hanliux commented Jul 21, 2019

@hanliux 没有其它说明NLService这个服务应该是被杀了,这个服务是监控通知栏的。

应该是没有被杀掉,今天开了qq,发现有qq的收到消息记录, 特别测试了一下,qq的信息,每条都接受到了,虽然没有内容,但每条都有日志,但微信的就是一个没有,普通消息也一个日志都得不到,很奇怪,明明都是一样形式的通知。为啥会出现这种情况呢。

@WeihuaGu
Copy link
Collaborator

WeihuaGu commented Jul 21, 2019

@hanliux 额……,这是因为代码写的是先用NotificationHandleFactory这个工厂类返回通知处理类,如果是微信,支付宝的通知就返回具体的通知处理类,不是的话返回null。然后返回null的才会打印那些。

我想我得加上这部分的日志显示,开始是都打印出来,后来重构了下代码,这部分的显示就没加。

如果微信收到了收款的通知消息,而没有post的日志,说明WechatNotificationHandle出了问题,要么是没调用doPost来进行推送,要么就是调用doPost时出了错。可以试下支付宝,看是不是正常的,如果正常就说明这个服务是正常运行的。

@hanliux
Copy link

hanliux commented Jul 26, 2019

@hanliux 额……,这是因为代码写的是先用NotificationHandleFactory这个工厂类返回通知处理类,如果是微信,支付宝的通知就返回具体的通知处理类,不是的话返回null。然后返回null的才会打印那些。

我想我得加上这部分的日志显示,开始是都打印出来,后来重构了下代码,这部分的显示就没加。

如果微信收到了收款的通知消息,而没有post的日志,说明WechatNotificationHandle出了问题,要么是没调用doPost来进行推送,要么就是调用doPost时出了错。可以试下支付宝,看是不是正常的,如果正常就说明这个服务是正常运行的。

测试了下支付宝,一切正常,推送都没有任何问题,就是微信不行,没有任何日志信息。

@theRotten
Copy link
Contributor

状况:点开log按钮之后,无法看到任何内容,微信支付消息也无法推送,

补充:看起来就像在小米手机上不起作用,但是在 一加7pro手机上就能用,可以将微信收款通知post到服务器。

机型:小米max2

问题:在小米手机上如何使用??

xcorp1986 pushed a commit to xcorp1986/receiptnotice that referenced this issue Sep 19, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants