studio programacion para móviles libros gratis español edición desarrollo curso aplicaciones android screen android-sensors sensormanager

programacion - Apagar la pantalla programáticamente cuando la cara está cerca de la pantalla en Android



manual programacion android español pdf (3)

Mi aplicación es un marcador y cuando el usuario sostiene el teléfono cerca de su cabeza, necesito apagar la pantalla y evitar hacer clic en los controles, como el comportamiento del marcador nativo de Android. ¿Qué nivel de API necesito y cómo puedo hacer esto correctamente?


El siguiente código le muestra cómo usar el sensor de proximidad:

public class SensorActivity extends Activity implements SensorEventListener { private SensorManager mSensorManager; private Sensor mProximity; @Override public final void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Get an instance of the sensor service, and use that to get an instance of // a particular sensor. mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); } @Override public final void onAccuracyChanged(Sensor sensor, int accuracy) { // Do something here if sensor accuracy changes. } @Override public final void onSensorChanged(SensorEvent event) { float distance = event.values[0]; // Do something with this sensor data. } @Override protected void onResume() { // Register a listener for the sensor. super.onResume(); mSensorManager.registerListener(this, mProximity, SensorManager.SENSOR_DELAY_NORMAL); } @Override protected void onPause() { // Be sure to unregister the sensor when the activity pauses. super.onPause(); mSensorManager.unregisterListener(this); }}

Intente this enlace para el uso del sensor de proximidad mientras el rostro está cerca de la pantalla, apague la pantalla.

Espero que esto te ayude.


Encontré la solución al desensamblar una aplicación VoIP muy famosa. Esta actividad después de presionar el botón 1 deshabilitará las teclas de pantalla y hardware cuando cierre los sensores. Después de presionar el botón 2 esta función se desactivará.

Además, esta función requiere permiso:

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

Actividad. Intentalo.

public class MainActivity extends Activity { private Button button1; private Button button2; private PowerManager powerManager; private PowerManager.WakeLock wakeLock; private int field = 0x00000020; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); try { // Yeah, this is hidden field. field = PowerManager.class.getClass().getField("PROXIMITY_SCREEN_OFF_WAKE_LOCK").getInt(null); } catch (Throwable ignored) { } powerManager = (PowerManager) getSystemService(POWER_SERVICE); wakeLock = powerManager.newWakeLock(field, getLocalClassName()); setContentView(R.layout.main); button1 = (Button) findViewById(R.id.button1); button2 = (Button) findViewById(R.id.button2); button1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if(!wakeLock.isHeld()) { wakeLock.acquire(); } } }); button2.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if(wakeLock.isHeld()) { wakeLock.release(); } } }); } }


Hay muchos dispositivos en los que el uso de la CPU aumenta si se prueba el método publicado por Solkin (usando el wakelock). Este es un error en los dispositivos Android.

Debe usar el evento onSensorChanged y simplemente mostrar una pantalla en negro para evitar problemas.