playgameservices / play-games-plugin-for-unity

Google Play Games plugin for Unity
Other
3.46k stars 965 forks source link

Crash on Android 11 #2937

Closed weeeBox closed 4 years ago

weeeBox commented 4 years ago

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!

weeeBox commented 4 years ago

After further investigation, I realized it's related to Unity API, not Google Play