Я нашел способ, и он не так уж сложен ... работает на любой версии API.
Вам необходимо использовать метод PowerManager.userActivity(l, false)
и зарегистрировать свою активность в качестве широковещательной передачи, полученной для намерения SCREEN_OFF:
В вашей активности OnCreate поместите что-то вроде:
mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.v(TAG, "Screen OFF onReceive()");
screenOFFHandler.sendEmptyMessageDelayed(0, 2000L);
}
};
Он отключит обработчик через 2 секунды после отключения экрана.
Зарегистрируйте получателя в вашем методе onResume ():
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
registerReceiver(mReceiver, filter);
Log.i(TAG, "broadcast receiver registered!");
Создайте обработчик, подобный приведенному ниже:
private Handler screenOFFHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// do something
// wake up phone
Log.i(TAG, "ake up the phone and disable keyguard");
PowerManager powerManager = (PowerManager) YourActivityName.this
.getSystemService(Context.POWER_SERVICE);
long l = SystemClock.uptimeMillis();
powerManager.userActivity(l, false);//false will bring the screen back as bright as it was, true - will dim it
}
};
Запрос разрешения в файле манифеста:
<uses-permission android:name="android.permission.WAKE_LOCK" />
Не забудьте отменить регистрацию вещательного приемника, когда закончите. Вы можете сделать это, например, в onDestroy () (что не гарантируется)
unregisterReceiver(mReceiver);
Log.i(TAG, "broadcast UNregistred!");