Desligar ou Reiniciar o aparelho via software

1,016 views
Skip to first unread message

Ademar Izu Gomes

unread,
Oct 29, 2011, 4:52:27 PM10/29/11
to androidb...@googlegroups.com
Olá pessoal,

gostaria de saber se alguém sabe se é possível reiniciar/desligar o aparelho via código. Já estou procurando por algum tempo e até o momento não encontrei a solução.

Se possível sem root. 

Obrigado,

--
Ademar Izu Gomes

Tatiana Al-Chueyr Martins

unread,
Oct 29, 2011, 5:05:16 PM10/29/11
to androidb...@googlegroups.com
Oi Ademar,

Usa  Android Debug Bridge:
$ adb reboot

Vem no SDK.

Abraços,

Tati

2011/10/29 Ademar Izu Gomes <adem...@gmail.com>

--
Tatiana Al-Chueyr

Ademar Izu Gomes

unread,
Oct 29, 2011, 5:18:35 PM10/29/11
to androidb...@googlegroups.com
Opa Tatiana,

então... o que eu tinha em mente seria basicamente isso que você me passou, mas sendo chamado de dentro da app... em Java seria algo como:

System.execute("reboot");

Mas creio que a classe System não vem com todos os métodos da similar do JDK. =(

Você teria outra sugestão?

2011/10/29 Tatiana Al-Chueyr Martins <tatiana....@gmail.com>



--
Ademar Izu Gomes

ComputationalCore

unread,
Oct 29, 2011, 8:49:32 PM10/29/11
to Android Brasil - Dev
Existe uma classe no pacote android.os chamada PowerManager (
http://developer.android.com/reference/android/os/PowerManager.html )
que tem o método reboot(). Porém você precisa declarar no
AndroidManifest android.permission.REBOOT, e aplicações normais de
usuário não podem usar essa essa permissão, apenas aplicações do
sistema ( de uma olhada nesse post para esclarecer melhor
http://www.krvarma.com/2010/10/security-permissions-in-android/).

Existe uma alternativa caso você tenha um aparelho com acesso root.
Abaixo segue um método estático que pode ajudar:

public static void rebootSU() {
Runtime runtime = Runtime.getRuntime();
Process proc = null;
OutputStreamWriter osw = null;
StringBuilder sbstdOut = new StringBuilder();
StringBuilder sbstdErr = new StringBuilder();

String command="/system/bin/reboot";

try {

//Isso faz o SuperUser aparecer o que permite a você
permitir ou bloquear o acesso toor
//Nada irá ocorrer se aparelho não for possuir acesso
root.
proc = runtime.exec("su");

osw = new OutputStreamWriter(proc.getOutputStream());
osw.write(command);
osw.flush();
osw.close();

} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (osw != null) {
try {
osw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
try {
if (proc != null)
proc.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

Espero ter ajudado.


On Oct 29, 7:18 pm, Ademar Izu Gomes <ademar...@gmail.com> wrote:
> Opa Tatiana,
>
> então... o que eu tinha em mente seria basicamente isso que você me passou,
> mas sendo chamado de dentro da app... em Java seria algo como:
>
> System.execute("reboot");
>
> Mas creio que a classe System não vem com todos os métodos da similar do
> JDK. =(
>
> Você teria outra sugestão?
>
> 2011/10/29 Tatiana Al-Chueyr Martins <tatiana.alchu...@gmail.com>
>
>
>
>
>
>
>
>
>
> > Oi Ademar,
>
> > Usa  Android Debug Bridge:
> > $ adb reboot
>
> > Vem no SDK.
>
> > Abraços,
>
> > Tati
>
> > 2011/10/29 Ademar Izu Gomes <ademar...@gmail.com>

ComputationalCore

unread,
Oct 29, 2011, 8:52:40 PM10/29/11
to Android Brasil - Dev
Desculpe ficou faltando um pedaço do código.

public static void rebootSU() {
Runtime runtime = Runtime.getRuntime();
Process proc = null;
OutputStreamWriter osw = null;
StringBuilder sbstdOut = new StringBuilder();
StringBuilder sbstdErr = new StringBuilder();

String command="/system/bin/reboot";

try {

/*Isso faz o SuperUser aparecer o que permite a você
permitir ou bloquear o acesso toor
Nada irá ocorrer se aparelho não for possuir acesso*/
proc = runtime.exec("su");

osw = new OutputStreamWriter(proc.getOutputStream());
osw.write(command);
osw.flush();
osw.close();

} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (osw != null) {
try {
osw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
try {
if (proc != null)
proc.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
sbstdOut.append(ReadBufferedReader(new InputStreamReader(proc
.getInputStream())));
sbstdErr.append(ReadBufferedReader(new InputStreamReader(proc
.getErrorStream())));
if (proc.exitValue() != 0) {
}
}


On Oct 29, 10:49 pm, ComputationalCore <computationalc...@gmail.com>
wrote:
> Existe uma classe no pacote android.os chamada PowerManager (http://developer.android.com/reference/android/os/PowerManager.html)
> que tem o método reboot(). Porém você precisa declarar no
> AndroidManifest android.permission.REBOOT, e aplicações normais de
> usuário não podem usar essa essa permissão, apenas aplicações do
> sistema ( de uma olhada nesse post para esclarecer melhorhttp://www.krvarma.com/2010/10/security-permissions-in-android/).

Ademar Izu Gomes

unread,
Oct 29, 2011, 9:24:13 PM10/29/11
to androidb...@googlegroups.com
Opa cara, valeu mesmo! =D

Era bem isso mesmo que eu estava precisando. ;)

[]'s

2011/10/29 ComputationalCore <computat...@gmail.com>



--
Ademar Izu Gomes

ComputationalCore

unread,
Oct 29, 2011, 10:20:09 PM10/29/11
to Android Brasil - Dev
De nada. Você pode precisar substituir as 2 penúltimas linhas por

sbstdOut.append(new BufferedReader(new
InputStreamReader(proc.getInputStream())));
sbstdErr.append(new BufferedReader(new
InputStreamReader(proc.getErrorStream())));





On Oct 29, 11:24 pm, Ademar Izu Gomes <ademar...@gmail.com> wrote:
> Opa cara, valeu mesmo! =D
>
> Era bem isso mesmo que eu estava precisando. ;)
>
> []'s
>
> 2011/10/29 ComputationalCore <computationalc...@gmail.com>
Reply all
Reply to author
Forward
0 new messages