前段时间我在学习一个监听本机来电状态并将来电号码信息发至指定号码的app,结果发现,代码完全没错,却每次运行时都会结束程序。通过debug,我发现问题出在获取手机来电状态这个地方。可是明明在manifest里面写了Service那一行啊(android.permission.READ_PHONE_STATE),是什么问题导致崩溃的?当时就几天都没解决。直到后来同学展示作品时,讲到技术难点提到了这个地方,我才明白。
原来,android 6.0 Marshmallow版本之后,系统不会在软件安装的时候就赋予该app所有其申请的权限,对于一些危险级别的权限,app需要在运行时一个一个询问用户授予权限。也就是说,在manifest里那一句申请Service等于白写,还不给报错......这时需要我们在运行虚拟机模拟时,在设置中手动开启权限,开启之后就不会再报错了。