Venkat
Venkat

Reputation: 3457

How to shutdown an Android mobile programmatically?

Is it possible to shutdown the mobile programmatically. that is with out using su commands..

Upvotes: 7

Views: 45906

Answers (7)

Jonathan Le Cornichone
Jonathan Le Cornichone

Reputation: 372

My solution : I have a system app installed in priv-app, no signed with the system key.

Process proc = Runtime.getRuntime().exec(new String[] { "/system/bin/svc", "power", "shutdown" });
proc.waitFor();

Upvotes: 0

Ken Johnson
Ken Johnson

Reputation: 21

With rooted shell command type in, svc power shutdown works for me in android 7.1

Upvotes: 2

Yogesh Rathi
Yogesh Rathi

Reputation: 6499

If your device is rooted then you can try below solution

Shutdown:

try {
    Process proc = Runtime.getRuntime()
                    .exec(new String[]{ "su", "-c", "reboot -p" });
    proc.waitFor();
} catch (Exception ex) {
    ex.printStackTrace();
}

Restart:

Same code, just use "reboot" instead of "reboot -p".

Upvotes: 1

Sheharyar
Sheharyar

Reputation: 75740

It is possible, but you need a Rooted Android device with Superuser access. You can't do it without Root unless your app is signed with the System Firmware Key. Try using the following code:

Shutdown:

try {
    Process proc = Runtime.getRuntime()
                    .exec(new String[]{ "su", "-c", "reboot -p" });
    proc.waitFor();
} catch (Exception ex) {
    ex.printStackTrace();
}

Reboot:

Same code, just use "reboot" instead of "reboot -p".

[On an other note: I read somewhere that these commands do not work on Stock HTC ROMs, but haven't confirmed myself]

Upvotes: 6

Sandeep
Sandeep

Reputation: 19452

This is the code i use to perform any system command.

void shutdown_sys()
{
    Process chperm;
    try {
        chperm=Runtime.getRuntime().exec("su");
          DataOutputStream os = 
              new DataOutputStream(chperm.getOutputStream());

              os.writeBytes("shutdown\n");
              os.flush();

              chperm.waitFor();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

Call this function from your android App. It will work if su is functional in your system. Let me know in case it does not work. I dont have an Android base ready to test. But the same works for reboot. So shutdown is also a linux shell command which ithink will be there in Android as well.. All the best

Upvotes: 2

Chathuranga Chandrasekara
Chathuranga Chandrasekara

Reputation: 20906

I don't see any resemblance with your title and the code snippet in the body. The snippet is related with KeyGuardManager which is used for lock and unlock the key pad.

In order to shutdown your phone you will need to use PowerManager or SU commands. (On rooted devices.)

Upvotes: 1

Krishnakant Dalal
Krishnakant Dalal

Reputation: 3578

You could possibly use the PowerManager to make it reboot (this does not guarantee that it'll reboot - OS may cancel it):

http://developer.android.com/reference/android/os/PowerManager.html#reboot(java.lang.String)

It requires the REBOOT permission:

http://developer.android.com/reference/android/Manifest.permission.html#REBOOT

Can you also check your logcat when trying to enable/disable keyguard, and post what's there?

You cannot do this from an ordinary SDK application. Only applications signed with the system firmware signing key can do this

Upvotes: 4

Related Questions