Как затемнить или заблокировать экран, как в телефонном разговоре?
У меня есть страница звонков, на которой пользователь прикладывает телефон к уху , я нашел как реализовать датчик приближения Proximity. К сожалению я не могу понять , как блокировать эран. Я пробывала просто убирать элементы с экрана (менять свойство isVisible), но это не совсем то. Когда происходит событие OnSensorChanged Надо как то поменять свойства экрана , что бы было как на обычных звонках.
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.Hardware;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Corporate_messenger.DB;
using Corporate_messenger.Service;
using Corporate_messenger.Service.Notification;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Xamarin.Forms;
namespace Corporate_messenger.Droid
{
[Activity(Label = "CallActivity",ScreenOrientation = ScreenOrientation.Portrait)]
public class CallActivity : Activity, ISensorEventListener
{
Android.Widget.Button BtnStartCall;
Android.Widget.Button BtnEndCall;
Android.Widget.Button BtnEndCallCenter;
SensorManager sensorManager;
Sensor proximitySensor;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
sensorManager = (SensorManager) GetSystemService(Context.SensorService);
sensorManager.RegisterListener(this, sensorManager.GetDefaultSensor(SensorType.Proximity), SensorDelay.Ui);
proximitySensor = sensorManager.GetDefaultSensor(SensorType.Proximity);
}
public void OnAccuracyChanged(Sensor sensor, [GeneratedEnum] SensorStatus accuracy)
{
var s = sensor;
}
public void OnSensorChanged(SensorEvent e)
{
// The sensor is triggered here, at this moment I can’t figure out how to Hide the screen (do not
// active , darken)
}
}
}
Ответы (1 шт):
решение было найдено, в методе OnCreate надо инициализировать следующее
SensorManager _sm;
Sensor proximity;
protected override async void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
_sm = (SensorManager)this.GetSystemService(SensorService);
if (_sm.GetSensorList(SensorType.Proximity).Count != 0)
{
proximity = _sm.GetDefaultSensor(SensorType.Proximity);
_sm.RegisterListener(this, proximity, SensorDelay.Normal);
}
}
В методе OnSensorChanged
public void OnSensorChanged(SensorEvent e)
{
if (mWakeLock == null)
{
mWakeLock = mPowerManager.NewWakeLock(WakeLockFlags.ProximityScreenOff, "incall");
mWakeLock.Acquire();
}
Sensor = false;
}
мы регистрируем сенсор _sm.RegisterListener(this, proximity, SensorDelay.Normal); поэтому когда вы выходите с окна обязательно снимите регистрацию , что бы OnSensorChanged выключился , так же на вызвать метод mWakeLock.Acquire();
вот так я это реализовала
if (null != mWakeLock)
{
mWakeLock.Release();
mWakeLock = null;
}
_sm.UnregisterListener(this, proximity);