由于Android 6.0监听PhoneStateListener.LISTEN_DATA_CONNECTION_STATE更改似乎不再需要READ_PHONE_STATE权限

时间:2015-10-30 10:29:39

标签: android android-permissions telephonymanager phone-state-listener

我正在将Android 6.0运行时权限应用到侦听运营商数据连接状态更改的应用中。我首先尝试从清单中删除READ_PHONE_STATE以检查应用程序需要权限的位置。令我惊讶的是,应用程序根本没有崩溃。

在此之后,我尝试在两台6.0之前的设备上进行相同的安装,这些设备实际上已经崩溃了。对我来说,似乎Android 6.0不再需要许可。有没有办法确认这个?

以下行是6.0之前设备崩溃的行:

tm(TelephonyManager).listen(this, PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);

2 个答案:

答案 0 :(得分:16)

  

有没有办法确认这个?

是的,此commit在注册事件类型READ_PHONE_STATELISTEN_CALL_STATELISTEN_DATA_ACTIVITY时删除了LISTEN_DATA_CONNECTION_STATE的请求:

Do not enforce PHONE_STATE_PERMISSION to register listener PHONE_STATE_PERMISSION should not be required to register to the following event types:
- PhoneStateListener.LISTEN_CALL_STATE
- PhoneStateListener.LISTEN_DATA_ACTIVITY
- PhoneStateListener.LISTEN_DATA_CONNECTION_STATE

In case of LISTEN_CALL_STATE, an empty string should be passed instead of incomingNumber, when caller has no PHONE_STATE_PERMISSION.

Bug: 21588537 Change-Id: I5b6d0308924f7e4cd13a983b8e0c9b3a5bbb119b

developer.android.com上的文档已更新,并且正确显示不需要该权限。

如果您的代码除了READ_PHONE_STATE之外由于其他原因而不需要LISTEN_DATA_CONNECTION_STATE权限,您可以将AndroidManifest.xml添加maxSdkVersion更改为uses-permission }:

<uses-permission android:name="android.permission.READ_PHONE_STATE" android:maxSdkVersion="22" />

答案 1 :(得分:1)

官方Android文档中没有列出PhoneStateListener.LISTEN_DATA_CONNECTION_STATE的特殊权限。

http://developer.android.com/reference/android/telephony/PhoneStateListener.html#LISTEN_DATA_CONNECTION_STATE