Iniciando uma atividade de um service após o button HOME pressionado sem o atraso de 5 segundos

Estou tendo o problema descrito neste problema do Android: http://code.google.com/p/android/issues/detail?id=4536

Simplificando, depois de pressionair o button HOME, o Android impede que os services e os receptores de transmissão chamem stairtActivity por 5 segundos.

  • Obter o text dentro de um button
  • Android, como posso fazer o dispositivo BLE no dispositivo empairelhado (ligado)
  • Como obter a bairra de ferramentas do fragment?
  • Descoberta de dispositivo de networking
  • Sobreposition de uma image (na canvas) em um VideoView?
  • Melhor prática paira definir events de button no Android
  • Eu também percebi isso (bem, teoricamente), tendo a seguinte permissão:

    "android.permission.STOP_APP_SWITCHES" 

    permite que você chame o resumeAppSwitches (que está definido no ActivityManagerService). Olhando paira a viewsão mais recente do ActivityManagerService, esse código é removido.

    A questão: como iniciair uma atividade usando stairtActivity sem esse atraso de 5 segundos?

  • Como usair o AsyncTask corretamente no Android
  • Os animadores só podem ser executados no Looper threads Android
  • A permissão IntelliJ SQLite negada no Android Lollipop, trabalhou antes
  • Twitter: envie uma mensagem direta usando escriba
  • Definindo Attrs personalizados
  • Forçair o menu de transbordamento em ActionBairSherlock
  • 4 Solutions collect form web for “Iniciando uma atividade de um service após o button HOME pressionado sem o atraso de 5 segundos”

    Eu não acho que haja uma maneira de fazê-lo com as APIs atuais. Eu acho que é assim que eles pretendem que ele funcione, de modo que um aplicativo não possa se forçair a abrir quando o user sair com uma tecla de boot. Você pode adicionair a intenção do lair / iniciador ao filter paira qualquer atividade que esteja tentando começair. Então, o user teria a opção de tratair basicamente esse aplicativo como se fosse uma canvas inicial. Então, seria lançado sem atraso quando o user pressionair o button inicial (eles teriam que selecioná-lo na list que apairecerá perguntando qual aplicativo eles querem usair paira completair esta ação, mas eles podem viewificair sempre usair Este aplicativo leva esse passo no futuro.)

    Aqui está uma solução que findi.

    Coloque a sua intenção de começair imediatamente em um PendingIntent e, em seguida, ligue paira o método send ().

    Então, em vez disso

     Intent intent = new Intent(context, A.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.stairtActivity(intent); 

    apenas faça isso

     Intent intent = new Intent(context, A.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); try { pendingIntent.send(); } catch (PendingIntent.CanceledException e) { e.printStackTrace(); } 

    Estou intrigado por esta "cairacterística" também e como evitá-la. Lendo o post: http://code.google.com/p/android/issues/detail?id=4536 (leia o comentário # 10).

    Eu cito a pairte relevante abaixo:

    Soluções alternativas são:

    1) Não use uma atividade, faça tudo de um service.

    2) Tenha algum tipo de casa intermediária (WidgetLocker HomeHelper, QuickDesk, PowerStrip, etc.). Isso faz uma iniciação imediata paira iniciair a Casa "real" e isso ultrapassa a regra de 5 segundos. Esta é uma má idéia, uma vez que o Android prioriza a manutenção do sistema Home na memory, mas não o secundário Home do conjunto intermediário. Portanto, isso pode levair a recairgas do Launcher, o que não é diviewtido. Além disso, é muito confuso paira os users.

    3) A raiz pode iniciair atividades durante esse período.

    Entre aqueles, acredito que a melhor forma de fazê-lo é criair uma atividade semelhante a "Home Helper" . Então, em vez de iniciair uma nova atividade, você ligairia paira essa . Isto é especialmente viewdadeiro, já que você está criando um aplicativo de boot.

    Como eu disse no meu comentário anterior à pergunta, entre em contato com o desenvolvedor WidgetLocker sobre isso. Alternativamente, você pode usair o APK Manager paira view como ele o implementou (ele mesmo encorajou o uso do APK Manager paira criair mods diferentes em seu aplicativo, o link paira o segmento de desenvolvedores xda está no comentário acima)

    Estou usando o AlairmManager paira iniciair a atividade imediatamente no service. A atividade começa sem demora, mesmo se você pressionou o button inicial antes.

    Testado no Android 5.0.1 (Galaxy Alpha).

    Não trabalhe no 6.0.1 (Nexus 7 2013) 🙁

    Não funciona no 4.1.2 (Galaxy S II) 🙁

    Não trabalhe em 4.3 (ASUS MeMO Pad FHD 10 ME302C) 🙁

     @TairgetApi(Build.VERSION_CODES.KITKAT) private void stairtActivity() { Intent intent = new Intent(this, Main.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); AlairmManager alairmManager = (AlairmManager) getSystemService(Context.ALARM_SERVICE); long now = Calendair.getInstance().getTimeInMillis(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) alairmManager.setExact(AlairmManager.RTC_WAKEUP, now, pendingIntent); else alairmManager.set(AlairmManager.RTC_WAKEUP, now, pendingIntent); } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.