導航:首頁 > 操作系統 > gsensorandroid

gsensorandroid

發布時間:2025-08-01 14:50:54

android鎵嬫満閮芥湁鍝浜泂ensor

1.Sensor Type
閲嶅姏鎰熷簲/鍔犻熷害浼犳劅鍣 (G-Sensor)
鍏夋劅搴 (Light-Sensor)
娓╁害鎰熷簲
鏂瑰悜鎰熷簲
紓佸満銆
涓磋繎鎬

2.濡備綍瀹炵幇Sensor緙栫▼
a.鑾峰彇緋葷粺鏈嶅姟錛圫ENSOR_SERVICE)榪斿洖涓涓猄ensorManager 瀵硅薄
sensormanager = (SensorManager)getSystemSeriver(SENSOR_SERVICE);
b.閫氳繃SensorManager瀵硅薄鑾峰彇鐩稿簲鐨凷ensor綾誨瀷鐨勫硅薄
sensorObject = sensormanager.getDefaultSensor(sensor Type);
c.澹版槑涓涓猄ensorEventListener 瀵硅薄鐢ㄤ簬渚﹀惉Sensor 浜嬩歡錛屽苟閲嶈澆onSensorChanged鏂規硶
SensorEventListener sensorListener = new SensorEventListener(){
};
d.娉ㄥ唽鐩稿簲鐨凷ensorService
sensormanager.registerListener(sensorListener, sensorObject, Sensor TYPE);
e.閿姣佺浉搴旂殑SensorService
sensormanager.unregisterListener(sensorListener, sensorObject);

f: SensorListener 鎺ュ彛鏄浼犳劅鍣ㄥ簲鐢ㄧ▼搴忕殑涓蹇冦傚畠鍖呮嫭涓や釜蹇呴渶鏂規硶錛
銆銆 onSensorChanged(int sensor,float values[]) 鏂規硶鍦ㄤ紶鎰熷櫒鍊兼洿鏀規椂璋冪敤銆
璇ユ柟娉曞彧瀵瑰彈姝ゅ簲鐢ㄧ▼搴忕洃瑙嗙殑浼犳劅鍣ㄨ皟鐢(鏇村氬唴瀹硅佷笅鏂)銆傝ユ柟娉曠殑鍙傛暟鍖呮嫭錛氫竴涓鏁存暟錛屾寚紺烘洿鏀圭殑浼犳劅鍣;涓涓嫻鐐瑰兼暟緇勶紝琛ㄧず浼犳劅鍣ㄦ暟鎹鏈韜銆傛湁浜涗紶鎰熷櫒鍙鎻愪緵涓涓鏁版嵁鍊礆紝鍙︿竴浜涘垯鎻愪緵涓変釜嫻鐐瑰箋傛柟鍚戝拰鍔犻熻〃浼犳劅鍣ㄩ兘鎻愪緵涓変釜鏁版嵁鍊箋
銆銆 褰撲紶鎰熷櫒鐨勫噯紜鎬ф洿鏀規椂錛屽皢璋冪敤 onAccuracyChanged(int sensor,int accuracy) 鏂規硶銆傚弬鏁板寘鎷涓や釜鏁存暟錛氫竴涓琛ㄧず浼犳劅鍣錛屽彟涓涓琛ㄧず璇ヤ紶鎰熷櫒鏂扮殑鍑嗙『鍊箋

3.鍏充簬G-Sensor
Android 鍔犻熷害浼犳劅鍣ㄧ殑綾誨瀷鏄 Sensor.TYPE_ACCELEROMETER
閫氳繃 android.hardware.SensorEvent 榪斿洖鍔犻熷害浼犳劅鍣ㄥ箋
鍔犻熷害浼犳劅鍣ㄨ繑鍥炲肩殑鍗曚綅鏄鍔犻熷害鐨勫崟浣 m/s^2(綾蟲瘡浜屾℃柟縐)錛屾湁涓変釜鏂瑰悜鐨勫煎垎鍒鏄
銆銆values[0]: x-axis 鏂瑰悜鍔犻熷害
銆銆values[1]: y-axis 鏂瑰悜鍔犻熷害
銆銆values[2]: z-axis 鏂瑰悜鍔犻熷害
銆銆鍏朵腑x,y,z鏂瑰悜鐨勫畾涔夋槸浠ユ按騫蟲斁緗鍦ㄧ殑鎵嬫満鐨勫彸涓嬭剼涓哄弬鐓х郴鍧愭爣鍘熺偣
銆銆x 鏂瑰悜灝辨槸鎵嬫満鐨勬按騫蟲柟鍚戱紝鍙充負姝
銆銆y 鏂瑰悜灝辨槸鎵嬫満鐨勬按騫沖瀭鐩存柟鍚戱紝鍓嶄負姝
銆銆y 鏂瑰悜灝辨槸鎵嬫満鐨勭┖闂村瀭鐩存柟鍚戱紝澶╃┖鐨勬柟鍚戜負姝o紝鍦扮悆鐨勬柟鍚戜負璐
闇瑕佹敞鎰忕殑鏄錛岀敱浜庡湴鐞冨滻鏈夌殑閲嶅姏鍔犻熷害g (鍊間負9.8 m/s^2)錛
銆銆鍥犳ょ幇瀹炰腑瀹為檯鍔犻熷害鍊煎簲璇ユ槸 z鏂瑰悜榪斿洖鍊 - 9.8 m/s^2.
銆銆姣斿備綘浠 2 m/s^2 鐨勫姞閫熷害灝嗘墜鏈烘姏璧鳳紝榪欐椂z鏂瑰悜鐨勮繑鍥炲煎簲璇ユ槸 11.8 m/s^2.
銆銆鍙嶄箣鑻ヤ互鎵嬫満浠2 m/s^2 鐨勫姞閫熷害鍧犺惤錛屽垯z鏂瑰悜鐨勮繑鍥炲煎簲璇ユ槸 7.8 m/s^2.
銆銆x,y鏂瑰悜鍒欐病鏈変笂榪伴檺鍒躲

㈡ android程序設計基礎中service的基本原理是什麼

1. 說明
android的後台運行在很多service,它們在系統啟動時被SystemServer開啟,支持系統的正常工作,比如MountService監聽是否有SD卡安裝及移除,ClipboardService提供剪切板功能,PackageManagerService提供軟體包的安裝移除及查看等等,應用程序可以通過系統提供的Manager介面來訪問這些Service提供的數據,以下將說明他們的工具流程
2. 舉例說明基本流程
以android系統支持sensor(感測器)實例來說明框架層的service和manager是如何配合工作的
1) 什麼是sensor
sensor是感測器, 比如控制橫豎屏切換利用的就是重力感測器(gsensor), 還有accelerator sensor可取得x, y, z三個軸上的加速度(應用如平衡球, 小猴吃香蕉等)
2) 應用程序調用(以下為關鍵代碼)
sensorManager=(SensorManager)getSystemService(context.SENSOR_SERVICE);
lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
sensorManager.registerListener(sensorListener, lightSensor, SensorManager.SENSOR_DELAY_NORMAL);
3) Manager層
a) 提供給應用程序調用的介面,同實與Service交互,實現功能
frameworks/base/core/java/android/hardware/SensorManager.java
4) Service層
a) 開機時就運行的管理Sensor的後台服務
frameworks/base/services/java/com/android/server/SensorService.java
b) snesor後台服務需要的JNI,通過它與系統級交互
frameworks/base/services/jni/com_android_server_SensorService.cpp
5) 系統層
a) 感測器的頭文件,硬體提供商按此文件的定義實現其功能
hardware/libhardware/include/hardware/sensors.h
b) 感測器的系統層實現,與內核交互,此處通常是硬體提供商提供的
hareware/libsensors
6) 內核及硬體層
內核訪問硬體,同時以設備文件等方式提供給上層控制介面和感測器數據
3. 系統層實現
1) frameworks/base/core/java/android/*Manager.java 對應用的介面
2) frameworks/base/core/jni/ 對應用的介面的JNI
3) frameworks/base/services/java/com/android/server/ 後台服務
4) frameworks/base/services/jni/ JNI與系統層介面
5) hardware/libhardware/include/ 系統層頭文件
6) hardware/libxxx 系統庫支持
7) 內核支持
4. 應用程序如何使用
1) 查看系統提供哪些服務
find frameworks/base/core/java/android/ -name *Manager.java
此處可以看到調用系統提供服務的入口
2) 一般register listener,事件發生時都收到回調
5. 新建一個service(以froyo為例)
1) 介面:介面供應用調用
frameworks/base/core/java/android/app/ContextImpl.java 加服務名與Manager對應
frameworks/base/core/java/android/content/Context.java 加服務名定義
2) Manager:提供服務對應的調用介面
frameworks/base/core/java/android/app/StartXXXXManager.java 實現調用介面
frameworks/base/core/java/android/app/IXXXXManager.aidl 定義調用介面
frameworks/base/Android.mk 加入aidl的編譯
3) service:提供後台服務支持
frameworks/base/services/java/com/android/server/XXXXService.java 服務實現
frameworks/base/services/java/com/android/server/SystemServer.java 啟動服務

㈢ android怎麼實現重力感應

由於重力感應器在板上安裝的方向不同,而移植時需要調整相關的代碼.
解決屏幕顯示顛倒相關問題,相關的有兩部分代碼:
1.內核重力感應器驅動部分,如 MMA7660
1vi drivers/input/gsensor/mma7660.c
在這個文件中尋找相似以下的代碼
1axis.y = mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT]);
2axis.x = mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT]);
3axis.z = mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT]);
然後按照你自己板的需要,將 X,Y 進行交換,進行相反數運算,將 Z 進行相反運算.
其實可以做得更方便一些,把這幾個操作寫到 Kconfig 裡面,通過宏來控制這些運算,就不用再改代碼了.
01#ifdef CONFIG_SWAP_XY02{
03 typeof(x) __tmp;
04 __tmp = x;05 x = y;
06 y = __tmp;07}08#endif09
10#ifdef CONFIG_REVERSE_X11 x = -x;12#endif13
14#ifdef CONFIG_REVERSE_Y15 y = -y;16#endif
17/* X Y 感應方向有問題,這很容易看出來.*/
18#ifdef CONFIG_REVERSE_Z
19 z = -z; /* 按正常情況下拿著設備,屏幕斜向上,如果不靈敏,把屏幕朝下試試,如果靈敏了,一般是 Z 反了.*/20#endif
2.Android部分,如果出現菜單顯示正常,但是玩重力感應游戲時有問題,這部分就要修改(2.1)
1vim frameworks/base/core/java/android/view/WindowOrientationListener.java
1public void onSensorChanged(SensorEvent event) {
2 float[] values = event.values;

㈣ android gsensor 休眠震動喚醒功能如何實現

一、喚醒源

設備休眠後,通過觸發喚醒源使設備恢復正常工作模式。設備喚醒源有多種,對於Android設備常見的就有PowerKey、來電喚醒、Alarm喚醒等。

喚醒源的實現處於內核空間,本文重點討論下PowerKey作為喚醒源的具體實現。

二、PowerKey喚醒源

PowerKey喚醒設備的原理,本質其實就是中斷。


PowerKey連接到CPU的一個輸入(Input)引腳(Pin)上,該Pin運行在中斷模式上。一旦PowerKey按下,引發Pin中斷;而該中斷具有喚醒CPU的功能,於是設備得以喚醒。

三、PowerKey對應的Pin
Configuration

和PowerKey相連的Pin的具體配置位於板級dts文件中,比如如下配置:

arch/arm/boot/dts/xxxxx.dts
power-key {
/** 是CPU的哪個Pin */
gpios = <&gpio0 GPIO_A5 GPIO_ACTIVE_LOW>;
/** Key code */
linux,code = <116>;
/** 起個名字 */
label = "power";
/** 該Pin具有wakeup的功能 */
gpio-key,wakeup;
};

著重說下linux,code =
<116>,116怎麼來的?

對於鍵盤,每一個按鍵都有唯一的編碼,在Linux中,編碼值位於:

input.h (kernelincludeuapilinux)
/*
* Keys and buttons
*/
#define KEY_RESERVED 0
#define KEY_ESC 1
#define KEY_BACKSPACE 14
#define KEY_TAB 15
#define KEY_POWER 116 /* SC System Power Down */


可知,PowerKey的編碼也在該文件中,且編碼值為116;一旦按下PowerKey,該值作為鍵值傳到input_event結構體的code成員變數中:

input.h (kernelincludeuapilinux)
/*
* The event structure itself
*/

struct input_event {
struct timeval time;
__u16 type;
__u16 code;
__s32 value;
};

之後我們會寫個Linux應用程序讀取code值。

閱讀全文

與gsensorandroid相關的資料

熱點內容
vsstudio如何編寫c語言程序並編譯 瀏覽:391
伺服器安裝虛擬機怎麼做 瀏覽:324
為什麼蘋果沒有顯示app 瀏覽:36
怎麼樣編譯app 瀏覽:643
手機pdf文件怎麼編輯 瀏覽:636
汽車換機油用什麼app 瀏覽:295
包頭養老保險在什麼app繳費 瀏覽:850
程序員對語數英的要求 瀏覽:392
大蕃號app更新如何安裝 瀏覽:352
為什麼知乎網頁版老是讓我打開app 瀏覽:79
壓縮袋團購 瀏覽:87
安徽省鴻申壓縮機有限公司 瀏覽:840
有什麼app可以遠程操控手機 瀏覽:866
清史稿譯pdf 瀏覽:955
你不知道程序員冷知識 瀏覽:216
海康威視攝像頭你的視頻已加密 瀏覽:98
程序員三年薪資 瀏覽:443
尋仙文字游戲源碼 瀏覽:914
java編程方向 瀏覽:420
單行PDF 瀏覽:642