Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android獲取手機方向

Android獲取手機方向

編輯:關於Android編程

如果用戶開啟了設置裡的屏幕旋轉,Android中處理橫豎屏切換,通常的做法是在AndroidManifest.xml中定義android:configChanges=orientation|keyboardHidden,然後在重寫onOrientationChanged方法,如下:

 

if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
    Log.i(info, landscape); // 橫屏 
} else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
    Log.i(info, portrait); // 豎屏 
}

 

如果用戶在設置裡禁止了屏幕旋轉,怎麼在應用中獲取手機的方向呢?我們可以用OrientationEventListener(方向事件監聽器),是一個當方向發生變化時,從SensorManager(傳感器管理程序)接收通知的輔助類。

用法如下:

 

@Override
protected void onCreate(Bundle savedInstanceState) {
		
	mAlbumOrientationEventListener = new AlbumOrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL);
	if (mAlbumOrientationEventListener.canDetectOrientation()) {
		mAlbumOrientationEventListener.enable();
	} else {
		Log.d(chengcj1, Can't Detect Orientation);
	}
}

@Override
protected void onDestroy() {
	mAlbumOrientationEventListener.disable();
	super.onDestroy();
}

private class AlbumOrientationEventListener extends OrientationEventListener {
	public AlbumOrientationEventListener(Context context) {
		super(context);
	}
		
	public AlbumOrientationEventListener(Context context, int rate) {
		super(context, rate);
	}

	@Override
	public void onOrientationChanged(int orientation) {
		if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) {
			return;
		}

		//保證只返回四個方向
		int newOrientation = ((orientation + 45) / 90 * 90) % 360
		if (newOrientation != mOrientation) {
			mOrientation = newOrientation;
				
			//返回的mOrientation就是手機方向,為0°、90°、180°和270°中的一個
		}
	}
}

 

說明:只要手機偏移一點,方向發生變化時,onOrientationChanged會一直執行,但是在實際開發中,我們只關心4個方向(0°,90°,180°,270°),因此用上面的方法轉化一下,轉化原理為:當偏移角度小於45°,都當成0°來處理;大於45°,小於90°,都當成90°來處理;同理,大於90°,小於135°,當成90°來處理;大於135°,小於180°,都當成180°來處理,依此類推......

 
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved