Jimmy
Jimmy

Reputation: 583

How to close another app in Android?

I have been developing an app, and I need to close another app in my code. Does anyone know any api to call to close an app?

BTW: my app will be pre-installed.

thanks

Upvotes: 7

Views: 26550

Answers (5)

zeitgeist
zeitgeist

Reputation: 1032

I have been able to close another app on Android 12 successfully. Here is how:

Basically, I am closing another app from a service although you should be able to do it from an app too.

  1. My service is a privileged system app that gets installed in system/priv-app/ (It has LOCAL_PRIVILEGED_MODULE := true in its Android.mk)

  2. I added <uses-permission android:name="android.permission.FORCE_STOP_PACKAGES" /> in AndroidManifest.xml

  3. I added in privapp-permissions.xml

    <privapp-permissions package="<my service package name>">
        <permission name="android.permission.FORCE_STOP_PACKAGES"/>
    </privapp-permissions>
  1. I called in my service this method with the package name of the application I want to close:
    private void closePackageApp(String namePackage) {
        ActivityManager activityManager = (ActivityManager)
                context.getSystemService(Context.ACTIVITY_SERVICE);
        try {
            Method forceStopPackage = activityManager.getClass().
                    getDeclaredMethod("forceStopPackage", String.class);
            forceStopPackage.setAccessible(true);
            forceStopPackage.invoke(activityManager, namePackage);
        } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
            e.printStackTrace();
        }
    }

I tested this and in the logs, I can see the app is being closed. However the app is not removed from the recent screen (logs suggested the app was disposed without first being removed with the input manager!).

However, I am sure the app was really being closed when it was in the background by comparing its lifecycle on opening again. Normally, it is onPause->onResume but now it is onPause->onCreate.

Upvotes: 1

Ahmed
Ahmed

Reputation: 824

Try This

    ActivityManager am = (ActivityManager) getApplicationContext().getSystemService("activity");
    Method forceStopPackage;                
    forceStopPackage =am.getClass().getDeclaredMethod("forceStopPackage",String.class);
    forceStopPackage.setAccessible(true);
    forceStopPackage.invoke(am, pkg);

In manifest file add this

<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"></uses-permission>

Upvotes: 5

Nick
Nick

Reputation: 3494

Since Android 2.2 (i.e. going forward), you can only close the background processes of other apps, you are no longer able to close their main activities.

If your app is targeting Android <2.2, look atandroid.permission.RESTART_PACKAGE.

If you want it to work properly on 2.2 and above (which you should :-)), look at android.permission.KILL_BACKGROUND_PROCESSES, but again, this only closes background services and such and might "mess up" the other app rather than doing any good.

With the right permissions, you can then do the following:

private ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
am.restartPackage("com.jimmy.appToBeClosed");

Upvotes: 8

Android Dev Dude
Android Dev Dude

Reputation: 142

You don't ever really want to close another application, due to Android activity lifecycle.
There's no benefit, and always detriment to closing another app if it's not yours, and very little benefit to closing your own.

http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

If you know for certain that you'll never, ever need a root activity and its children (an "app"), you can stop it to free memory (it doesn't free that much), but if you do the user may restart it while it's still in cache, stopped, which can cause problems if the stopped state is restored. So this is a bad practice.

Upvotes: -2

poe
poe

Reputation: 147

If both applications are yours, you can use AIDL for inter-process communication to send a message telling the other application to close. See http://developer.android.com/guide/developing/tools/aidl.html.

Upvotes: 0

Related Questions