1. 程式人生 > >Android 解決熄屏後傳感器關閉問題_方法一:保持螢幕常亮

Android 解決熄屏後傳感器關閉問題_方法一:保持螢幕常亮

採用 <精通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" />