Search code examples
androidandroid-sourceandroid-binder

ConnectivityService: ConnectivityService NetworkRequestInfo binderDied - application dies after lost internet connection


I have following permissions in AndroidManifest.xml

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.REBOOT" />
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

Then I have this BroadcastReceiver:

public class StartAfterRebootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    if (Properties.DEBUG) Log.d(TAG, "Receiver started");
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkRequest.Builder builder = new NetworkRequest.Builder();
    connectivityManager.registerNetworkCallback(
            builder.build(),
            new ConnectivityManager.NetworkCallback() {

                @Override
                public void onAvailable(Network network) {
                    if (Properties.DEBUG) Log.d(TAG, "Receiver running after connectivity up");
                    if (Properties.DEBUG)
                        Log.d(TAG, "Receiver starts service, probably once");
                    if (!UpdateService.isCurrentlyRunning()) {
                        if (Properties.DEBUG)
                            Log.d(TAG, "Receiver UpdateService is not running, try to start");
                        UpdateService.startService(context);
                    }
                }

                @Override
                public void onLost(Network network) {
                    if (Properties.DEBUG)
                        Log.d(TAG, "Receiver not running after connectivity lost");
                    if (UpdateService.isCurrentlyRunning()) {
                        if (Properties.DEBUG)
                            Log.d(TAG, "Receiver UpdateService is running, sometimes need to redesigned stop service");
                        UpdateService.stopService(context);
                    }
                }
            }
    );
}
}

I have Android TV box with Android 11, exactly I have two boxes from different vendors, on both is there only ethernet, not wifi, but on one of them is all working well, but on the other app start, starts foreground service correctly, when I plug out ethernet cable, service is correcty destroyed, but its all. App dies and over logcat I got this message:

05-18 22:05:03.444   548   852 D ConnectivityService: ConnectivityService NetworkRequestInfo binderDied(NetworkRequest [ LISTEN id=19, [ Capabilities: NOT_RESTRICTED&TRUSTED&NOT_VPN&FOREGROUND Uid: 10027 AdministratorUids: [] RequestorUid: 10027 RequestorPackageName: com.droidlogic.updater] ], android.os.BinderProxy@dc6b02d)

What I am doing wrong. I am sitting here over week and I cant see any mistake. Its system app compiled with android.

Thank you very much. D


Solution

  • I moved ConnectivityService to Service and it helps.