Rodar aplicativos em segundo plano.

207 views
Skip to first unread message

Manoel Canhos

unread,
Jan 20, 2014, 5:35:51 AM1/20/14
to androidb...@googlegroups.com
Olá, tenho o seguinte problema.
Tenho um aplicativo que fica pegando a posição atual do celular e enviando sua posição para um servidor na web, até ai esta tudo em ordem.
Só que o que acontece é que quando a tela do celular apaga o aplicativo para de enviar a posição, como faço para ele ficar rodando em segundo plano e continuar enviando a posição mesmo com a tela apagada ? 

Celular usado para testes Samsung Galaxy Y e Motorola moto A953.

Rudson Lima

unread,
Jan 20, 2014, 5:37:22 AM1/20/14
to androidb...@googlegroups.com
Seu app é um serviço?


--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.



--
Rudson Lima ( live-O )
Desenvolvedor Android - Web Service C# - SQL Server - Delphi
+55 85 87050560 - Fortaleza-ce

Manoel Canhos

unread,
Jan 20, 2014, 5:38:51 AM1/20/14
to androidb...@googlegroups.com
Sim.


--
You received this message because you are subscribed to a topic in the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/androidbrasil-dev/u0v0dxf8KSQ/unsubscribe.
To unsubscribe from this group and all its topics, send an email to androidbrasil-...@googlegroups.com.

Rudson Lima

unread,
Jan 20, 2014, 5:43:39 AM1/20/14
to androidb...@googlegroups.com
Já testou Debug? O que o LogCat mostra?  Da algum erro?


2014/1/20 Manoel Canhos <manoel...@gmail.com>

Manoel Canhos

unread,
Jan 20, 2014, 5:45:42 AM1/20/14
to androidb...@googlegroups.com
Ele nao da erro, primeiramente ele esta enviando normal ai quando a tela apaga para de enviar.


2014/1/20 Rudson Lima <rudso...@gmail.com>

Rudson Lima

unread,
Jan 20, 2014, 5:50:38 AM1/20/14
to androidb...@googlegroups.com
Ai complicou o-O;; Nunca implementei um serviço no Android e se desse pelo erro poderia tentar lhe ajudar...

Mas ele continua rodando e deixa de enviar as informações ou o Android fecha seu serviço?

Se ele tiver fechando não existe nenhuma permissão que você possa colocar para que ele não feche seu serviço?

Boa sorte..


2014/1/20 Manoel Canhos <manoel...@gmail.com>

Jones Almeida

unread,
Jan 20, 2014, 6:23:11 AM1/20/14
to androidb...@googlegroups.com
Pelo que notei o Android, querendo ou não para o WIFI, e as vezes até para o serviço quando a tela apaga, pra poupar energia.... Já tentei de tudo também e continua desta forma. É alguma coisa interna do Android.
Coloca o celular direto na energia, e você vai que não para.

Tiago Sousa Rocha

unread,
Jan 20, 2014, 7:07:26 AM1/20/14
to androidb...@googlegroups.com
Olha, tenho uma aplicação que coleta dados de localização, ela é um serviço e não para quando a tela é desligada. Apenas quando está utilizando apenas a conexão WiFi, o app perde conexão com a NET, mas continua a coletar e armazenar como OFF-Line e depois descarrega para o server.

Tiago Sousa Rocha
Desenvolvedor de Hardware e Analista de Sistemas

Contato:
(83) 8801-8575
(83) 8111-5793
(83) 9654-1382

http://tiagorocha.net/
skype: tiagosousarocha

Henrique Melo

unread,
Jan 20, 2014, 7:11:20 AM1/20/14
to androidb...@googlegroups.com
Pelo que eu sei, o gps é desativado ao ter a tela apagada.
Tanto que alguns apps que possuem controle de corrida, só funcionam com a tela ligada.
Agora não sei se isso se aplica caso seu app/serviço seja de sistema.
Henrique Nogueira de Melo
Analista e Arquiteto de Software

Tiago Sousa Rocha

unread,
Jan 20, 2014, 7:12:39 AM1/20/14
to androidb...@googlegroups.com
Quem determina isso é o App. Ele pode permanecer ligado tranquilamente mas você deve fazer o controle disso em sua App.

Tiago Sousa Rocha
Desenvolvedor de Hardware e Analista de Sistemas

Contato:
(83) 8801-8575
(83) 8111-5793
(83) 9654-1382

http://tiagorocha.net/
skype: tiagosousarocha


Manoel Canhos

unread,
Jan 20, 2014, 7:21:09 AM1/20/14
to androidb...@googlegroups.com
vou tentar refazer o serviço, devo estar fazendo algo errado.

Jones Almeida

unread,
Jan 20, 2014, 7:51:51 AM1/20/14
to androidb...@googlegroups.com
Duvida como determinar que a tela não deve ser apagada ? alguém sabe ?

marcelo yonamine

unread,
Jan 20, 2014, 7:59:55 AM1/20/14
to androidb...@googlegroups.com
Tenho um app de geolocalização rodando como serviço com base no GCM, não dorme nunca.
Para fazer isso: permissão e receiver
<receiver android:name="com.test.exemplo.PollReceiver"
            android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
                        <intent-filter>
                                <action android:name="android.intent.action.BOOT_COMPLETED"/>
                        </intent-filter>
                </receiver>


permissão <uses-permission android:name="android.permission.WAKE_LOCK" />


Dentro do código do service tem


        {
            // Wake Android Device when notification received
            PowerManager pm = (PowerManager) context
                    .getSystemService(Context.POWER_SERVICE);
            final PowerManager.WakeLock mWakelock = pm.newWakeLock(
                    PowerManager.FULL_WAKE_LOCK
                            | PowerManager.ACQUIRE_CAUSES_WAKEUP, "GCM_PUSH");
            mWakelock.acquire();

            // Timer before putting Android Device to sleep mode.
            Timer timer = new Timer();
            TimerTask task = new TimerTask() {
                public void run() {
                    mWakelock.release();
                }
            };
            timer.schedule(task, 5000);
        }


Jones Almeida

unread,
Jan 20, 2014, 8:13:53 AM1/20/14
to androidb...@googlegroups.com
Legal seu código, sobre o WakeLock.
Mais porque depois de 5 segundos, vc libera ?

marcelo yonamine

unread,
Jan 20, 2014, 8:21:22 AM1/20/14
to androidb...@googlegroups.com
"Mais porque depois de 5 segundos, vc libera ?"
"economia-descanso" no processamento

Jones Almeida

unread,
Jan 20, 2014, 8:46:22 AM1/20/14
to androidb...@googlegroups.com
É que a notificação BOOT_COMPLETED, vc recebe só depois de reiniciar o aparelho correto.

E ai vc vai dar um adquire, e depois de 5 segundos ele volta a dormir, correto?

Então vc coloca o adquire dentro de outro lanço... correto ? Se não ele dorme depois de 5 segundo e não volta mais....


Desculpe estou tentando entender o código.

marcelo yonamine

unread,
Jan 20, 2014, 10:11:45 AM1/20/14
to androidb...@googlegroups.com
É que o serviço não pode entrar no modo de economia de energia, não teria como receber notificações. A cada 5 segundos o código da uma "cutucada" para confirmar se o serviço não "dormiu".   

Jones Almeida

unread,
Jan 20, 2014, 10:43:14 AM1/20/14
to androidb...@googlegroups.com
Então não seria assim ?

 Timer timer = new Timer();
            TimerTask task = new TimerTask() {
                public void run() {
                    mWakelock.release();
                    mWakelock.acquire();
                }
            };
            timer.schedule(task, 5000);
        }

Jones Almeida

unread,
Jan 20, 2014, 10:51:52 AM1/20/14
to androidb...@googlegroups.com
Bom sendo um pouco mais claro, o que eu não entendi, é onde e quando vc da o  mWakelock.acquire(),
Para ele ficar rodando sempre... se depois de 5 segundos vc sempre da o mWakelock.release() .

Obrigado desde já, isso pode solucionar um problema meu....

Pedro Cortez

unread,
Jan 20, 2014, 11:00:31 AM1/20/14
to androidb...@googlegroups.com
Eu tenho um app que faz isso tambem... O Wake lock que resolveu

att,
Pedro Cortez


2014/1/20 Jones Almeida <jonesa...@gmail.com>

George Henrique Silva

unread,
Jan 20, 2014, 2:14:20 PM1/20/14
to androidbrasil-dev
A resposta é o wake lock, mas se você deseja fazer um tracking menos preciso mas que gaste menos energia eu recomendo usar o Alarm Manager e "agendar" a cada 5, 10 ou 30 minutos para que seu serviço execute, colha a informação e entregue o resultado ao servidor, assim a sua bateria vai durar muito mais.

George H. Silva
__
Android Community Manager
Intel do Brasil


2014/1/20 Pedro Cortez <pedro.fell...@gmail.com>



--
--
George Henrique Silva

marcelo yonamine

unread,
Jan 20, 2014, 5:19:39 PM1/20/14
to androidb...@googlegroups.com
Não sei se deste modo daria certo. release(); também serve para poupar bateria.

Jones Almeida

unread,
Jan 20, 2014, 6:37:56 PM1/20/14
to androidb...@googlegroups.com
 {
            // Wake Android Device when notification received
            PowerManager pm = (PowerManager) context

Vc inicia esse condigo onde, dentro do service  ?

marcelo yonamine

unread,
Jan 20, 2014, 7:20:13 PM1/20/14
to androidb...@googlegroups.com
public class GCMIntentService extends GCMBaseIntentService {


///////////////////////////////////////


@Override
    protected void onMessage(Context context, Intent data) {


///////////

Gabriel Augusto

unread,
Jan 23, 2014, 7:58:13 AM1/23/14
to Android Brasil Dev
Faço exatamente assim! O Service inicia, faz o seu trabalho e agenda com o AlarmManager para a próxima.

Em paralelo, recebo notificações por GCM quando (por algum motivo) o serviço foi interrompido, ou quando simplesmente o usuario deseja uma posição no momento.

--
Gabriel Augusto 
 |  gabrielaugustodm
013 9 97940055


Em 20 de janeiro de 2014 17:14, George Henrique Silva <ghs...@gmail.com> escreveu:

Tiago Sousa Rocha

unread,
Jan 27, 2014, 6:44:08 AM1/27/14
to androidb...@googlegroups.com
Pessoal, vocês poderiam me esclarecer uma dúvida, por favor. 
O Android ele pode a qualquer momento parar um aplicativo por questões de gerenciamento de recursos. Pergunto: Este código postado anteriormente fará com que o Android não "mate" o aplicativo?

Desde já, agradeço a atenção de todos.

Tiago Sousa Rocha
Desenvolvedor de Hardware e Analista de Sistemas

Contato:
(83) 8801-8575
(83) 8111-5793
(83) 9654-1382

http://tiagorocha.net/
skype: tiagosousarocha


Douglas Drumond

unread,
Jan 27, 2014, 7:43:21 PM1/27/14
to androidb...@googlegroups.com

2014-01-27 Tiago Sousa Rocha <tsrr...@gmail.com>

Este código postado anteriormente fará com que o Android não "mate" o aplicativo?

​Não. Se estiver em background consumindo recursos e o Android precisar, é um "kill -9" mesmo. Tanto que o Android até tem recursos para liberar wakelocks de processos mortos (leia mais em http://www.androiddesignpatterns.com/2013/08/binders-death-recipients.html).​
Mas o AlarmManager faz com que o Android acorde seu app de novo no momento certo (vai criar outro processo, iniciar serviço, passar pelo ciclo de vida, bla bla bla).


Tiago Sousa Rocha

unread,
Jan 28, 2014, 5:03:04 PM1/28/14
to androidb...@googlegroups.com

Galera, muito obrigado pelas ajudas. Alguém tem algum exemplo de código que faça um Link-to-Death no Android?

Reply all
Reply to author
Forward
0 new messages