Фоновая служба не работает на MIUI 9.6 Redmi 4x - PullRequest
0 голосов
/ 13 октября 2018

Я искал во всем Интернете понимание того, почему мой фоновый сервис не работает.Когда я закрываю приложение, служба отключается без повторного вызова из приемника Brodcast.Это руководство: https://www.quora.com/How-do-I-keep-an-app-running-in-the-background-in-MIUI показывает три разных метода, и ни один из них не работает для меня.Я уверен, что приложение прекрасно работает, потому что оно отлично работает с эмулятором, тем же API 24, и оно работало с huawei aswell, опять же API.

XML

<service
    android:name="com.arvi.neverendingbackgroundservice.SensorService"
    android:enabled="true"
    android:exported="true"
    android:stopWithTask="false">
</service>

<receiver
    android:name="com.arvi.neverendingbackgroundservice.SensorRestartBroadcastReceiver"
    android:enabled="true"
    android:exported="true"
    android:label="RestartServiceWhenStopped">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
        <action android:name="android.intent.action.QUICKBOOT_POWERON"/>
    </intent-filter>
</receiver>

Услуга

public class SensorService extends Service {
    private Context ctx;
    TimerCounter tc;
    private int counter = 0;
    private static final String TAG = SensorService.class.getSimpleName();

    public SensorService() {

    }

    public SensorService(Context applicationContext) {
        super();
        ctx = applicationContext;
        Log.i(TAG, "SensorService class");
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.i(TAG, "onCreate()");

        tc = new TimerCounter();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        super.onStartCommand(intent, flags, startId);
        Log.i(TAG, "onStartCommand()");


        tc.startTimer(counter);
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        Log.i(TAG, "serviceOnDestroy()");

        super.onDestroy();

        Intent broadcastIntent = new Intent(getApplicationContext(),SensorRestartBroadcastReceiver.class);
        sendBroadcast(broadcastIntent);
        tc.stopTimerTask();
    }

    @Override
    public void onTaskRemoved(Intent rootIntent) {
        Log.i(TAG, "serviceonTaskRemoved()");



        // workaround for kitkat: set an alarm service to trigger service again
        Intent intent = new Intent(getApplicationContext(), SensorService.class);
        PendingIntent pendingIntent = PendingIntent.getService(this, 1, intent, PendingIntent.FLAG_ONE_SHOT);
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC_WAKEUP, SystemClock.elapsedRealtime() + 5000, pendingIntent);

        super.onTaskRemoved(rootIntent);

    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        Log.i(TAG, "onLowMemory()");
    }
}
...