samsung reiniciar porque pantalla moto mientras mantener encendida congela como celular carga android

reiniciar - ¿Cómo puedo saber si la pantalla está encendida en Android?



mantener pantalla encendida samsung (6)

En Android 2.2 (Nivel 7), la función PowerManager.IsScreenOn() devuelve un valor booleano que es verdadero si la pantalla está encendida y falso si la pantalla está apagada. Estoy desarrollando código para Android 1.5 (Nivel 3). ¿Cómo realizo la misma tarea en versiones anteriores de Android?

No quiero encender o apagar la pantalla en mi código. Sólo quiero saber qué es.


Así es como debes hacerlo:

PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); boolean result= VERSION.SDK_INT>=VERSION_CODES.KITKAT_WATCH&&powerManager.isInteractive()||VERSION.SDK_INT<VERSION_CODES.KITKAT_WATCH&&powerManager.isScreenOn(); return result;


Estoy publicando esto porque en un dispositivo HUAWAI Prism II Android 4.1.1 (API 16) el juego en el que estoy trabajando ( http://www.playlunapuma.com ) tenía el siguiente comportamiento molesto:

Estoy mostrando mi menú principal que tiene alguna animación en un SurfaceView y reproduce un sonido de vez en cuando. El dispositivo queda inactivo, se atenúa y luego se apaga. onDestroy en mi actividad, y luego, mientras la pantalla está apagada, crea nuevamente mi actividad, ¡llamando a onCreate ! Así que el problema es que mis animaciones y sonidos se reproducen mientras la pantalla está apagada. Lo que realmente quiero que suceda es que mi ciclo de animación no se ejecute en absoluto si la pantalla está apagada. Los receptores de transmisión no funcionan porque no puedo almacenar el estado desde la última vez que se activó la pantalla. Pensé en algunos trucos con booleanos estáticos, pero parecía un kluge que podría no funcionar y tener casos de borde horribles. La pantalla ya está apagada cuando mi actividad se crea de nuevo, por lo que no obtendré un evento a través del receptor de difusión que mi pantalla esté apagada.

Resolví esto usando tanto un receptor de difusión como el código listado arriba.

En mi onCreate , creo el receptor de difusión. Esto controlará mi bucle de animación cuando la pantalla se encienda y apague.

if (mScreenReceiver == null) { mScreenIntentFilter = new IntentFilter(Intent.ACTION_SCREEN_ON); mScreenIntentFilter.addAction(Intent.ACTION_SCREEN_OFF); mScreenReceiver = new ScreenReceiver(); registerReceiver(mScreenReceiver, mScreenIntentFilter); }

public class ScreenReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { controlAnimLoop(false, false, true); } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { controlAnimLoop(false, false, false); } } }

En mi isScreenOn , isScreenOn , que es este código:

private boolean isScreenOn() { if (android.os.Build.VERSION.SDK_INT >= 20) { // I''m counting // STATE_DOZE, STATE_OFF, STATE_DOZE_SUSPENDED // all as "OFF" DisplayManager dm = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE); for (Display display : dm.getDisplays ()) { if (display.getState () == Display.STATE_ON || display.getState () == Display.STATE_UNKNOWN) { return true; } } return false; } PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); return powerManager.isScreenOn(); }


Estoy usando la siguiente función:

public boolean isInteractive() { PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH ? powerManager.isInteractive() : powerManager.isScreenOn(); }


Hay una mejor manera de usar BroadcastReceivers:

// If you use API20 or more: DisplayManager dm = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE); for (Display display : dm.getDisplays()) { if (display.getState() != Display.STATE_OFF) { return true; } } return false; // If you use less than API20: PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); if (powerManager.isScreenOn()){ return true; }

Tenga en cuenta que Display.getState() también puede devolver STATE_DOZE y STATE_DOZE_SUSPEND que significa que la pantalla está encendida de una manera especial. Más información sobre Display.getState() y sus valores de retorno aquí: http://developer.android.com/reference/android/view/Display.html#getState()

También tenga en cuenta que aunque la documentación oficial recomienda usar isInteractive() lugar de isScreenOn() , si realmente desea conocer el estado de la pantalla, Display.getState() es una mejor opción debido a las condiciones ''especiales'' que establecen la pantalla. Mientras que el dispositivo no es interactivo.


Puedes lograr esto configurando receptores de transmisión para ACTION_SCREEN_ON y ACTION_SCREEN_OFF .


MainActivity.Java

public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_HEADSET_PLUG); filter.addAction(Intent.ACTION_POWER_CONNECTED); filter.addAction(Intent.ACTION_POWER_DISCONNECTED); filter.addAction(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); registerReceiver(new MyReceiver(), filter); } }

MyReciever.Java

public class MyReceiver extends BroadcastReceiver { MainActivity mActivity; @Override public void onReceive(Context arg0, Intent arg1) { mActivity = (MainActivity) arg0; TextView tv = (TextView)mActivity.findViewById(R.id.textView1); if(arg1.getAction().equals(Intent.ACTION_HEADSET_PLUG)) { tv.setText("Headset Plugin "); } else if(arg1.getAction().equals(Intent.ACTION_POWER_CONNECTED)) { tv.setText("Power Connected "); } else if(arg1.getAction().equals(Intent.ACTION_POWER_DISCONNECTED)) { tv.setText("Power Disconnected "); } else if(arg1.getAction().equals(Intent.ACTION_SCREEN_ON)) { tv.setText("Screen ON "); } else if(arg1.getAction().equals(Intent.ACTION_SCREEN_OFF)) { tv.setText("Screen OFF "); } } }