Android Служба запуска не работает при запуске приложения? - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь установить будильник для перезапуска приложения в 8:30 утра каждый день, поэтому я проектирую сервис и приемник,

     <receiver android:name=".AlarmReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.SCREEN_ON" />
            <action android:name="android.intent.action.SCREEN_OFF" />
        </intent-filter>
    </receiver>

AlarmReceiver. java

    public class AlarmReceiver extends BroadcastReceiver{
       public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (Intent.ACTION_SCREEN_ON.equals(action)){  //not working ?
          Log.d("BootReceiver", "screen on completed");
          Intent Alarm = new Intent(context,LongRunningService.class);  //start Service
          context.startService(Alarm);
       }

       if (Intent.ACTION_BOOT_COMPLETED.equals(action)){ //not working ?
        Log.d("BootReceiver", "system boot completed");
        Intent Alarm = new Intent(context,LongRunningService.class); //start Service
        context.startService(Alarm);
       }

       if ("startAlarm".equals(intent.getAction())){
        Intent home = new Intent(context, MainActivity.class);
        home.putExtra("RELOAD",1);
        home.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(home);
    }

LongRunningService. java

    public int onStartCommand(Intent intent, int flags, int startId) {
    new Thread(new Runnable(){

        @Override
        public void run() {
            Log.i(TAG, "run: executed at "+ new Date().toString()); //not working?
        }
    }).start();

    AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);

    // Set the alarm to start at 8:30 a.m.
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 8);   
    calendar.set(Calendar.MINUTE, 30);     
    calendar.set(Calendar.SECOND, 00);   

  }

Фактически, я запускаю службу в MainActivity, но я не хочу запускать службу

onCrate в MainActivity, потому что моя сигнализация установлена ​​8 : 30 для перезапуска MainActivity,

, что будет проблемой, 8:30:00 ~ 8:30:30 повторит перезагрузку моего приложения ....

1 Ответ

0 голосов
/ 11 марта 2020

Согласно документам

Приложения, которые нацелены на Android 8.0 или выше, больше не могут регистрировать широковещательные приемники для неявных широковещательных передач в своем манифесте. Неявная трансляция - это трансляция, которая не нацелена на это приложение специально

Так что, если вы хотите получать эту трансляцию, вам нужно зарегистрировать ее во время запуска приложения (и она будет работать, только если ваше приложение не уничтожено) , JobScheduler будет лучше соответствовать вашим потребностям, я думаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...