I’m applying Android 6.0 runtime permissions into an app which listens to carrier data connection state changes. I first tried to just remove the READ_PHONE_STATE from the manifest to check where the app requires the permission. To my surprise the app didn’t crash at all.
After this I’ve tried the same installation on two pre 6.0 devices which did actually crash on it. To me it seems like Android 6.0 does no longer require the permission. Is there any way to confirm this?
The line below is the one on which the pre 6.0 devices crashes:
Is there any way to confirm this?
Yes, this commit removes the request of
READ_PHONE_STATE when register the event type
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
The documentation on developer.android.com was updated and correctly shows that the permission are not required.
If your code doesn’t need the permission
READ_PHONE_STATE for other reason apart from
LISTEN_DATA_CONNECTION_STATE you can change your
maxSdkVersion to the
<uses-permission android:name="android.permission.READ_PHONE_STATE" android:maxSdkVersion="22" />
There is no special permission listed for
PhoneStateListener.LISTEN_DATA_CONNECTION_STATE in the official android documentation.