[Android Service Start在应用启动时不起作用?

问题描述 投票:0回答:1

我试图设置闹钟以每天在8:30.am重新启动应用程序,所以我设计了服务和接收器,

     <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 in MainActivity,因为我的警报设置为8:30来重新启动MainActivity,

将会出现问题,8:30:00〜8:30:30将重复重新启动我的应用程序...。

android service broadcastreceiver alarmmanager
1个回答
0
投票
因此,如果您想接收此广播,则需要在应用运行期间对其进行注册(并且只有在您的应用未销毁的情况下,该广播才有效)。我认为JobScheduler会更好地满足您的需求。
© www.soinside.com 2019 - 2024. All rights reserved.