1. 程式人生 > >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°來處理,依此類推......

相關推薦

Android獲取手機方向

如果使用者開啟了設定裡的螢幕旋轉,Android中處理橫豎屏切換,通常的做法是在AndroidManifest.xml中定義android:configChanges="orientation|key

android 獲取手機信息工具類

telephony == 系統 設備 android pack devices 信息 context package com.yqy.yqy_listviewheadview; import android.content.Context; import androi

Android 獲取手機SIM卡運營商

uil track service del 手機 star tor eas on() 直接上代碼: /** * 獲取SIM卡運營商 * * @param context * @return */ public static String ge

android 獲取手機設備品牌

pos 品牌 style article rand 什麽 適配 span 簡單 在有些數據要獲取手機設備是什麽品牌,特別做一些適配的時候,好了就講下怎樣或者手機是什麽品牌: String brand =android.os.Build.BRAND; 就這麽簡

Android 獲取手機的廠商、型號、Android系統版本號、IMEI、當前系統語言等工具類

parameter toc systems star lan gets post version -h 最近在開發中,需要用到一些系統信息,這裏我把這些方法寫成一個工具類方便以後復用,該工具類有以下6個功能: 1、獲取手機制造廠商 2、獲取手機型號 3、獲取手機系統當前使用

Android 獲取手機模擬器sd卡圖片及擷取圖片

需把圖片儲存到找到手機模擬器(夜神模擬器)sd卡中的圖片路徑:檔案管理器/mnt/sdcard/images(images是自己創的資料夾) java程式碼: package com.example.android_07; import android.graphics.Bitmap

android獲取手機型號和手機廠商

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

android獲取手機內部儲存空間和外部儲存空間

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android獲取手機版本號、品牌等 相關資訊工具類

主要有,獲取手機系統版本,獲取手機品牌、獲取軟體版本資訊、獲取螢幕尺寸寬高(包含和不包含虛擬鍵)以及獲取手機ip地址 public class DeviceUtils { /** * 品牌 */ public static String getDevic

Android獲取手機唯一標識

//獲取手機唯一標識 private String getId() { StringBuilder deviceId = new StringBuilder(); // 渠道標誌 deviceId.append("a");

Android 獲取手機儲存資訊詳解(記憶體,外存等)

ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); //系統記憶體資訊 ActivityManager.MemoryInfo memInfo = new ActivityManager

Android 獲取手機的解析度兩種方法

  A,過時的API [2]獲取手機的解析度         WindowManager wm  = (WindowManager) getSystemService(WINDOW_SERVICE

android獲取手機型號和系統版本號

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);

Android 獲取手機儲存總大小,系統佔用空間

一、Android 儲存介紹及通常查詢大小 手機儲存有兩種,內建記憶體和外接記憶體(SD),目前可擴充套件記憶體的機型正在減少,大部分是內建儲存的手機,內建128G、256G已經很常見,但如果有擴充套件功能的話,買個乞丐版+SD卡也是美滋滋,畢竟廠家增加儲存空間後手機定價也不便宜。言

mono for android 獲取手機照片或拍照並裁剪儲存

using System; using Android.App; using Android.Content; using Android.Widget; using Android.OS; using Android.Graphics; using System.IO; names

Android獲取手機聯絡人匹配使用者表並按字母A-Z排序展示

1、前言 最近在做公司專案的時候遇到一個新增手機聯絡人的需求,主要有以下幾個功能點: 讀取聯絡人:讀取使用者手機上的通訊錄裡的聯絡人列表 好友排序:按照拼音順序對好友進行排序,相容英文數字符號等 字母索引:右側字母導航條,既可拖動也可點選,聯動ListVi

android-獲取手機小區資訊介面設計

1. manifests <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package

Android獲取手機IP地址 WIFI MAC地址

獲取手機IP地址 第一步:新增許可權 <uses-permission android:name="android.permission.INTERNET"/> 第二步:上程式碼 2333 private St

android獲取手機聯絡人並且按字母進行排序

public static ArrayList<LinkManItem> getMobileLinkManList(Context context) {    ArrayList<LinkManItem> linkManList = new ArrayList<LinkManIt

Android獲取手機獲取的資訊(暫時我能想到的)

總結了網上的一些工具類,希望對大家有所幫助,大家可以在評論下方補全更多的獲取方法,更多的幫助大家,謝謝。 package com.mydemo.utils; import android.Manifest; import android.app.ActivityManage