android - 由于Android 6.0监听PhoneStateListener.LISTEN_DATA_CONNECTION_STATE的变化似乎不再需要READ_PHONE_STATE权限

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

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

在此之后,我在两台 6.0 之前的设备上尝试了相同的安装,但实际上确实崩溃了。对我来说,Android 6.0 似乎不再需要权限。有什么办法可以证实这一点吗?

下面一行是 pre 6.0 设备崩溃的行:

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

最佳答案

Is there any way to confirm this?

是的,这个commit在注册事件类型LISTEN_CALL_STATELISTEN_DATA_ACTIVITYLISTEN_DATA_CONNECTION_STATE 时删除READ_PHONE_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 的文档已更新并正确显示不需要权限。

如果您的代码由于LISTEN_DATA_CONNECTION_STATE 之外的其他原因不需要READ_PHONE_STATE 权限,您可以更改AndroidManifest.xml 添加maxSdkVersionuses-permission:

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

关于android - 由于Android 6.0监听PhoneStateListener.LISTEN_DATA_CONNECTION_STATE的变化似乎不再需要READ_PHONE_STATE权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33433829/

相关文章:

android - 如何在 mupdf 中生成 cmap_cns.h?

android - 手机启动时服务没有启动

c# - 如何在 Monodroid 中结束来电?

Android 处理电话

javascript - Android WebView 和 WebSockets/Paho.MQTT

java - Android如何监控app占用内存

android - 在 RecyclerView 适配器类中请求权限 - onRequestPermissionsResult 未调用

android - 无法在 oreo -telephony manager 中结束通话

缺少 AndroidManifest.xml

android - 为什么RECEIVE_SMS和READ_SMS权限没有不同的提示框要求权限?