Android 解決熄屏後傳感器關閉問題_方法一:保持螢幕常亮
阿新 • • 發佈:2019-02-02
採用 <精通Android 3> 上的方法來解決 感測器監聽器被關閉的問題
螢幕關閉通常會導致感測器監聽器被關閉,所以另類的解決方法是設定螢幕為常亮狀態.
缺點耗電,有些手機會出現不明問題.
核心程式碼片:
需要在oncreat的時候設定
捕獲螢幕熄滅的廣播mPwrMgr = (PowerManager) this.getSystemService(POWER_SERVICE); mWakelock = mPwrMgr .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Accel"); mWakelock.acquire(); // Save the current value of the screen timeout, then set it always on try { mSavedTimeout = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT); } catch (Exception e) { mSavedTimeout = 120000; // 2 minutes } Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, -1); // always on
public BroadcastReceiver mReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) { System.out.println("The screen has turned off"); // Turn the screen back on again, from the main thread handler.post(new Runnable() { public void run() { if (mTurnBackOn != null) mTurnBackOn.release(); mTurnBackOn = mPwrMgr.newWakeLock( PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "AccelOn"); mTurnBackOn.acquire(); } }); } } };
註冊和登出廣播
@Override protected void onStart() { IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF); registerReceiver(mReceiver, filter); super.onStart(); } @Override protected void onStop() { unregisterReceiver(mReceiver); mWakelock.release(); if (mTurnBackOn != null) mTurnBackOn.release(); super.onStop(); }
許可權
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />