刚学习广播接收者,就摸索着做了一个监测手机开机启动的软件,备份手机联系人等信息。
为了确保广播在手机启动完成后确实启动了该软件,就在广播接收者内部添加了一个通知Notification,即当运行了广播接收者后在任务栏弹出"开机成功"的通知。
通知代码如下:
Notification.Builder builder = new Notification.Builder(context);
builder.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("通知")
.setContentText("开机成功");
Notification notification = builder.build();
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(1024, notification);
然而,奇怪的事情出现了,本程序在手机上测试时没有通知弹出。但,查看日志发现弹出通知的代码确实执行了,但报了一个不该出现的异常:
01-29 12:41:36.535 2594-2594/? E/NotificationService﹕ Suppressing notification from package com.qianfeng.gl4study.contactbackup by user request.
研究发现,Notification.Builder使用的最低版本是 API 11。而手机是API 19,完全满足了。
各种折腾之后,最后却发现在手机设置中有一项通知栏推送的设置,这一项设置一定不能关闭,允许该应用推送信息,这样就能正常弹出通知了。其实很简单的问题却浪费了很长时间,一直在代码上找原因,最后却发现问题不在代码。
这不算什么技术,只是不同厂商定制系统不同,设置也不一样。安卓的定制化对开发带来了很多的麻烦,但也为使用者带来了方便,所以不能简单的说是好还是坏吧。出现问题要调试的时候,就从各方面来考虑会出现问题的地方,先从代码入手,若代码没有错误,就要考虑不同厂商定制制系统的原因了。可以换一部手机或者使用虚拟机来测试程序。一步一步找寻原因,找错的过程就是一个探索的过程。用平常心看待,一切都很容易解决。
最后一句,加油!