Android AlarmManager and BroadcastReceiver running in background Service

a 夏天 提交于 2020-01-15 15:15:47

问题


I'm currently having a problem integrating AlarmManager and BroadcastReceiver.

Im my app, I'm running a background service that runs regardless that app is running or not. I think I get this part working fine. The background service keeps an array that changes based on user's location. However, at 8:00am everyday, I want the app to reset the array variable to default. After much looking around online, it seems like the way to do this is via AlarmManager (to initiate the task every 8:00am) and using BroadcastReceiver (to receive the alarm, and perform the task).

So basically the code goes something like this:

public class BackgroundService extends Service {

    private ArrayList thisArray;

    private BroadcastReceiver thisReceiver = new BroadcastReceiver(){

        @Override
        public void onReceive(Context context, Intent intent) {
            setArrayToDefault();
        }

    }

    @Override
    public void onCreate(){

        super.onCreate();
        Calendar cal = new GregorianCalendar();
        cal.add(Calendar.MINUTE, 2); //example

        this.registerReceiver(thisReceiver, new IntentFilter("BackgroundService"));

        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), ONE_MINUTE, "what to put here?"); //example, repeat every minute

    }

    private void setArrayToDefault(){
        //here, the array will be changed back to default values
    }
}

My main issue is on how to set the AlarmManager to call thisReceiver everytime it's set. Any idea? Is my approach correct?


回答1:


Im my app, I'm running a background service that runs regardless that app is running or not.

Please don't. This is why users attack us with task killers and the Force Stop from the Manage Services screen in Settings.

My main issue is on how to set the AlarmManager to call thisReceiver everytime it's set. Any idea?

You are not registering the BroadcastReceiver, so AlarmManager will not be able to contact it.

Please please please please please please please redesign your service such that it does not have to run all of the time. Android will be killing off your service due to old age, anyway, so if you want a reliable and stable app, you need to do this redesign, anyway.



来源:https://stackoverflow.com/questions/7212109/android-alarmmanager-and-broadcastreceiver-running-in-background-service

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!