好記性不如爛筆頭(一),記性不如爛筆頭
擷取系統設定狀態
我們可以通過Settings.System類來擷取到一些系統設定的狀態,所以我們可以通過以下代碼來擷取系統的狀態,比如ACCELEROMETER_ROTATION
等,不過有一點要注意的就是,Android的ROM太多了,不同的廠商可能會直接改掉Android的實現,然後自己實現一套,然後,就崩了。
所以在真正處理的時候,我們需要去捕獲異常,保證代碼的健壯性。
/*** 擷取系統螢幕方向是否被鎖定的狀態* @return*/public static boolean isLock(Context context){ int lock = Settings.System.getInt(context.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, -1);return lock != 1;}return false;}
監控系統設定“鎖定方向”或者“自動旋轉”按鈕改變
我們都知道ContentObserver監控的Content是指Android本身提供的一些底層資料庫,比如簡訊,電話等,當然,也包括我們的設定項,
所以,通過上面的方法,我們可以擷取到系統設定的狀態,但是如何在狀態改變的時候,也第一時間知道呢,那就要求我們去註冊一個
Observer了,也就是觀察者,具體代碼如下。
1、建立Observer
private ContentObserver mRotationLockObserver = new ContentObserver(new Handler()) {@Overridepublic void onChange(boolean selfChange) { // 能夠進入到這個函數,就說明對應的Content的內容已經發生變化了,也即設定項的值已經被改變了。 // 而 selfChange在這裡表明是否當前App改變設定的值的}};
2、 註冊Observer
上面只是建立一個對Content的Observer,但是具體需要去監聽哪個內容呢,這就由我們在註冊的時候來決定了。
在之前的博文中,有寫過一篇文章,是對簡訊收件匣進行監聽的,大家有興趣的話可以看一下那一篇文章,就會更好地瞭解關於這個ContentObserver的使用了。
Android學習小Demo(13)Android中關於ContentObserver的使用
getContentResolver().registerContentObserver(Settings.System.getUriFor(Settings.System.ACCELEROMETER_ROTATION),true, mRotationLockObserver);
3、撤消Observer
getContentResolver().unregisterContentObserver(mRotationLockObserver);
監聽手機螢幕方向改變
可通過繼承OrientationEventListener來自訂一個類,其中onOrientationChanged方法會在螢幕方向發生變化的時候被調用。
參數orientation的值為0-359,表明螢幕此時旋轉的角度。
public class OrientationDetector extends OrientationEventListener {public OrientationDetector(Context context) {super(context);}@Overridepublic void onOrientationChanged(int orientation) {if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) {}