priority - O Android AlarmManager não funciona em alguns dispositivos quando o aplicativo é fechado



notificação android studio (3)

Estou tentando executar o IntentService como tal no AlarmManager setRepeating() a cada meia hora. Quero enviar um para transmitir, do elenco amplo ao serviço de intenção. No serviço, algumas funcionalidades serão feitas.

Porém, inicialmente o AlarmManager não será AlarmManager enquanto o aplicativo estiver no estado fechado.

Quando meu aplicativo está sendo executado ou em estado de segundo plano, o alarme está funcionando bem e quando eu fecho o aplicativo, o alarme não está funcionando em alguns dispositivos .

O que devo fazer para executar o alarme mesmo se o aplicativo estiver fechado?

https://src-bin.com


Answer #1

Atualmente, os dispositivos vêm com mais segurança no contexto do consumo de energia da bateria. Por padrão, os dispositivos mantêm quase todos os aplicativos no modo de economia de energia. Em alguns dispositivos, seu trabalho em segundo plano (local, gerenciador de alarmes) não funcionará assim que você sair do aplicativo. Em outros dispositivos, as tarefas em segundo plano não funcionarão após um limite de bateria (como 13%). Portanto, você precisa manter o aplicativo fora desse modo de economia de bateria para executá-lo sem problemas, mesmo em segundo plano. A maneira de atingir esse comportamento nesses dois fabricantes é:

Xiaomi

  • Vá para Bateria => Energia => Economia de bateria do aplicativo => selecione seu aplicativo e escolha Sem restrições (para configurações de segundo plano) e, em seguida, opção Permitir para o local de segundo plano.

  • Para iniciar automaticamente seu aplicativo após a inicialização: Vá para o aplicativo de segurança => Permissões => Iniciar automaticamente e verifique seu aplicativo.

Samsung

O Samsung Smart Manager App costumava interromper todo o trabalho em segundo plano após 3 dias, se você não acessar o aplicativo. Portanto, a maneira de desativar esse recurso é:

  • Vá para Bateria nas configurações => Aplicativos não monitorados => Adicione seu aplicativo à lista de permissões. Algumas outras versões da Samsung podem diferir do local para desativá-lo, como Bateria => Detalhe => Selecione o aplicativo e "Não otimizar".

Para outros dispositivos, deve haver as mesmas opções de energia diretamente na opção de configurações ou algum aplicativo é fornecido para lidar com isso.


Answer #2

Na documentação de setRepeating() :

A partir da API 19, todos os alarmes repetidos são inexatos.

Além disso, setRepeating() não funciona com o Doze .

Você deve usar alarmes exatos (definidos pelo método AlarmManager apropriado, com base no nível da API do dispositivo):

if (Build.VERSION.SDK_INT >= 23) {
    alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,
            triggerTime, pendingIntent);
} else if (Build.VERSION.SDK_INT >= 19) {
    alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent);
} else {
    alarmManager.set(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent);
}

E reagende-os sempre que disparam.

Para o reagendamento, você pode adicionar o tempo de disparo original ao Intent :

intent.putExtra(KEY_TRIGGER_TIME, triggerTime);

Em seguida, recupere esse extra em onReceive() , adicione o intervalo desejado a ele e reagende o alarme usando o novo valor:

@Override
public void onReceive(Context context, Intent intent) {
    long triggerTime = intent
            .getLongExtra(KEY_TRIGGER_TIME, System.currentTimeMillis());

    // adding one day to the current trigger time
    triggerTime += TimeUnit.DAYS.toMillis(1);

    // set a new alarm using the new trigger time
    // ...
}

NOTA: Como os @Opiatefuchs mencionados no comentário acima, alguns fabricantes (como Xiaomi ou Huawei) podem implementar determinadas funções de economia de bateria que podem impedir que os alarmes sejam disparados e não podem ser ignorados programaticamente.


Answer #3

para celular Lenovo: -

você precisa ir na configuração -> aplicativo-> selecionar aplicativo-> desmarque Restringir para iniciar

agora será trabalho em segundo plano como estado morto





android