Google Play library crashes on Android 11 while trying to call TelephonyManager.getNetworkType() without checking READ_PHONE_STATE permission:
at android.os.Parcel.createExceptionOrNull(Parcel.java:2373)
at android.os.Parcel.createException(Parcel.java:2357)
at android.os.Parcel.readException(Parcel.java:2340)
at android.os.Parcel.readException(Parcel.java:2282)
at com.android.internal.telephony.ITelephony$Stub$Proxy.getNetworkTypeForSubscriber(ITelephony.java:8762)
at android.telephony.TelephonyManager.getNetworkType(TelephonyManager.java:3021)
at android.telephony.TelephonyManager.getNetworkType(TelephonyManager.java:2985)
at com.unity3d.services.core.connectivity.ConnectivityMonitor.connectionStatusChanged(ConnectivityMonitor.java:162)
at com.unity3d.services.core.connectivity.ConnectivityNetworkCallback.onCapabilitiesChanged(ConnectivityNetworkCallback.java:48)
at android.net.ConnectivityManager$NetworkCallback.onAvailable(ConnectivityManager.java:3327)
at android.net.ConnectivityManager$CallbackHandler.handleMessage(ConnectivityManager.java:3607)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.os.HandlerThread.run(HandlerThread.java:67)
The workaround is:
TelephonyManager tm = ...;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
//noinspection MissingPermission
... = tm.getNetworkType(); // it's safe to call on pre-Android 11
} else if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE)
== PackageManager.PERMISSION_GRANTED) {
//noinspection MissingPermission
... = tm.getNetworkType(); // safe to use after the permission was checked
}
Without this fix every game with Google Play Services would crash on Android 11!
Google Play library crashes on Android 11 while trying to call
TelephonyManager.getNetworkType()
without checkingREAD_PHONE_STATE
permission:The workaround is:
Without this fix every game with Google Play Services would crash on Android 11!