¿Cómo desactiva Android Wear cuando está en modo de suspensión?

Cuando Android Wear pasa al modo de suspensión (pantalla atenuada), algunas partes de mi código no se ejecutan. Utilizo el temporizador en el servicio de fondo para activar algunas acciones, como el envío de datos de desgaste a móviles, pero los datos no se envían. Se envía cuando toco la pantalla para despertarla.

También intento utilizar Timer para activar una notificación con vibración cuando la pantalla está apagada, pero no aparece hasta que toco la pantalla.

En el modo de depuración (ya sea Bluetooth o USB), el envío de datos y la notificación funcionan correctamente.

Sospecho que esto se debe a que cuando Android Wear está en modo de suspensión, su CPU funciona a un nivel mínimo porque el temporizador sigue funcionando, pero no para GoogleApiClient, IntentService o Notificación.

He intentado muchas maneras de despertar CPU como AlarmManager, PowerManager, Wakelock, pero no funcionó para Android Wear.

¿Alguien ha encontrado este problema? ¿Cuál es la solución?

Estoy usando PowerManger para despertar mi dispositivo portátil cada vez que recibo el mensaje del dispositivo manejado. No olvides liberar PowerManager.WakeLock

 public abstract class WatchFaceActivity extends Activity { private PowerManager.WakeLock mWakeLock; private Handler mWakeLockHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_clock_watch_face); PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); mWakeLock = powerManager.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "MyWakelockTag"); mWakeLockHandler = new Handler(); IntentFilter messageFilter = new IntentFilter("message-forwarded-from-data-layer"); MessageReceiver messageReceiver = new MessageReceiver(); LocalBroadcastManager.getInstance(this).registerReceiver(messageReceiver, messageFilter); } public class MessageReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (!mWakeLock.isHeld()) { mWakeLock.acquire(); } mWakeLockHandler.removeCallbacksAndMessages(null); mWakeLockHandler.postDelayed(mReleaseRunnable, 5000); } } private Runnable mReleaseRunnable = new Runnable() { @Override public void run() { mWakeLock.release(); } }; @Override protected void onDestroy() { super.onDestroy(); mWakeLockHandler.removeCallbacksAndMessages(null); mWakeLock.release(); } } 

Y permite permiso WAKE_UP en su Manifiesto.

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

Usted debe utilizar AlarmManager junto con WakefulBroadcastReceiver y startWakefulService (). Vea esta solución de trabajo .
Puede encontrar respuestas para sus preguntas más en el historial de chat en ese post aquí . Esta es la única solución que funcionó para nuestra aplicación.

@SeaDog tiene éxito al hacer llamadas http cuando el dispositivo está en modo de suspensión profunda con esta solución. Intentalo.

  • Wake + Wifi bloqueo sin efecto
  • Unity3D Android Lockscreen no se muestra cuando la pantalla se agota. (Wakelock?)
  • Wake se bloquea servicio androide recurrente
  • ¿Hay alguna manera de recibir un evento de espera de la CPU en Android?
  • Eliminar el permiso WAKE_LOCK no deseado fusionado de la biblioteca
  • WakeLock finalizó mientras seguía teniendo error aunque lo estoy lanzando
  • Desarrollar la aplicación de alarma
  • Preguntas para principiantes: Wakelocks
  • WakeLock finalizado mientras se mantiene
  • WakeLock bajo bloqueo GCM_LIB
  • Android: apaga la pantalla sin activar la pantalla de suspensión / bloqueo - Activar con pantalla táctil
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.