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.