Выключайте экран программно, когда лицо закрывает экран на Android

Мое приложение – это дозвонщик, и когда пользователь держит телефон возле его головы, мне нужно отключить экран и не нажимать на элементы управления – например, поведение нативного набора для Android. Какой уровень API мне нужен и как я могу сделать это правильно?

Solutions Collecting From Web of "Выключайте экран программно, когда лицо закрывает экран на Android"

Я нашел решение, разобрав одно очень известное приложение VoIP. Это действие после нажатия кнопки1 отключит экран и аппаратные клавиши при закрытии датчиков. После нажатия кнопки2 эта функция будет отключена.

Кроме того, для этой функции требуется разрешение:

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

Мероприятия. Попробуй.

 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(); } } }); } } 

Есть много устройств, где использование ЦП становится высоким, если вы попробуете метод, опубликованный Солкином (используя wakelock). Это ошибка в устройствах Android.

Вы должны использовать событие onSensorChanged и просто отображать черный экран, чтобы избежать каких-либо проблем.

В следующем коде показано, как использовать датчик приближения:

 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); }} 

Попробуйте эту ссылку для использования датчика приближения, в то время как Face близок к экрану, отключите экран.

Надеюсь, это поможет вам.