Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Restart service after force stop

I am developing an application which is used as application locker, an app which is able to protect other installed apps by asking the user for a password on opening those apps, my app is here

The problem is that the application can be easily skipped by force close it from the android task manager, how can I overcome this?

Also what is the best way to check for a new application open, to make a service which check every one second for the app on the top of tasks or to fire alarm with alarm manager every second to make the check.

like image 447
Omar Hassan Avatar asked Jun 10 '13 11:06

Omar Hassan


2 Answers

Updated :

Restart service after force stop

Answer : Sorry you can't restart it until the user manually launches application.

Assuming that your service is running as part of the process and if the user force-stops your process, you are prevented from ever running the service again until the user manually launches you.This is especially valid from 3.0 and above version ( check for yours). It also seems logical when you think that there is an app which keeps a service started all the time and is annoying the user in some way. So when the user orders a hit ( :) force-stops) on the app, it should not restart the service to continue bugging the user.

For instance, Imagine what would happen if you could create apps which just ate at your processor time by holding a wake lock, and you couldn't kill them. This would be horrible and a huge security disaster.

So, you will not be able to restart your service by any means until the user launches one of your activities.

Also you cannot disable the force-stop button AFAIK. You should take the viewpoint that nothing on the device is yours to control besides your app and (to a limited extent) the resources to which you're granted access.

Finnally, even the gtalk app will bend to your will if you desire to force stop. It will start only when you use Gtalk or other apps which use the gtalk service such as PUSH Gmail ( for phones where gtalk isnt a part of firmware).

Reference Link

Solution :

https://stackoverflow.com/a/11238779/1218762

like image 179
Ronak Mehta Avatar answered Nov 04 '22 15:11

Ronak Mehta


I solved this problem by scheduling AlarmManager, to run my service again:

    public void onDestroy() {
        AlarmManager alarmMgr = (AlarmManager)this.getSystemService(this.ALARM_SERVICE);
        Intent i = new Intent(this, MyService.class);
        PendingIntent pendingIntent = PendingIntent.getService(this, 0, i, 0);
        alarmMgr.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10, pendingIntent);
    }
like image 44
Lubo Avatar answered Nov 04 '22 15:11

Lubo