日韩视频在线精品视频免费观看-日韩视频在线观看中字-日韩视频在线观看一区-日韩视频在线观看免费-日韩视频在线观看-日韩视频在线播放

產(chǎn)品分類

當(dāng)前位置: 首頁(yè) > 工業(yè)電子產(chǎn)品 > 集成電路(ICs) > IC傳感器

類型分類:
科普知識(shí)
數(shù)據(jù)分類:
IC傳感器

android 傳感器 源碼:Android傳感器源碼分析(AOSP)

發(fā)布日期:2022-05-11 點(diǎn)擊率:56


android 傳感器 源碼:Android傳感器源碼分析(AOSP)  第1張

android 傳感器 源碼:Android傳感器源碼分析(AOSP)

簡(jiǎn)介
上一節(jié)制作了一個(gè)傳感器的應(yīng)用,應(yīng)用程序獲取傳感器數(shù)據(jù)代碼流程大致如下

源碼分析
如上所示,在應(yīng)用層調(diào)用幾個(gè)常用接口就能夠獲取到傳感器數(shù)據(jù)了,主要接口包括

下面對(duì)這四個(gè)接口為主線來學(xué)習(xí)源代碼,理解傳感器的框架

getSystemService
該接口是一個(gè)用來獲取系統(tǒng)服務(wù)的接口,SensorManager是一個(gè)抽象類,為應(yīng)用層提供傳感器接口,SystemSensorManager繼承SensorManager實(shí)現(xiàn)了這些接口功能,我們來看一下SystemSensorManager的創(chuàng)建.

SystemSensorManager在SystemServiceRegistry的靜態(tài)初始化塊當(dāng)中,因此在系統(tǒng)初始階段加載SystemServiceRegistry時(shí),SystemSensorManager就會(huì)被創(chuàng)建,來看一下它的構(gòu)造函數(shù)

調(diào)用nativeCreate創(chuàng)建Native層的SensorManager,在創(chuàng)建過程中會(huì)循環(huán)等待SensorService被創(chuàng)建,與其建立binder關(guān)系,接著調(diào)用SensorSerivce的getSensorList,來獲取硬件傳感器列表信息.

上面SensorManager會(huì)等待SensorService注冊(cè),將它保存在成員變量mSensorServer中.小結(jié)一下這一段流程UML圖

SensorManager功能都來自于SensorService,它在Android的Sensor框架中占據(jù)核心位置,接下來看一下分析一下SensorService的相關(guān)代碼.
當(dāng)內(nèi)核啟動(dòng)后執(zhí)行init 程序,該程序解析 init.rc文件(zygote包含在init.${ro.zygote}.rc中),rc文件中指定的應(yīng)用程序在app_main.cpp中,調(diào)用AndroidRuntime的start方法,接著通過JNI調(diào)用Zyoteinit.java中的main函數(shù),從這里開始追蹤.

上面代碼可知ZygoteInit的main函數(shù)執(zhí)中調(diào)用startSystemServer函數(shù),調(diào)用forkSystemServer創(chuàng)建系統(tǒng)服務(wù),跳轉(zhuǎn)到SystemServer的main函數(shù)

在 SystemServer 的main函數(shù)中,會(huì)創(chuàng)建SystemService對(duì)象,并調(diào)用run方法,在run方法中調(diào)用startBootstrapServices(),接著調(diào)用Native方法startSensorService(),

在android_server_SystemServer_startSensorService中創(chuàng)建線程start_sensor_service來實(shí)例化SensorService,然后將SensorService添加到ServiceManager當(dāng)中(SensorManager從ServiceManager里獲取SensorService).當(dāng)SensorService被創(chuàng)建時(shí),onFirstRef被調(diào)用,這個(gè)初始化函數(shù)完成了一些重要的初始化過程,我們來看一下

在 SensorService 的 onFirstRef 接口中,獲取SensorDevice(單例類)的引用,這里看一下SensorDevice的構(gòu)造函數(shù)

SensorDevice調(diào)用 hw_get_module接口加載HAL的Sensor庫(kù)庫(kù),接著調(diào)用HAL層提供的open接口,執(zhí)行HAL層的初始化,同時(shí)返回硬件訪問接口,接著調(diào)用 Sensor HAL提供的 get_sensors_list 接口,獲取所支持的 Sensor列表.
接著上面SensorService::onFirstRef接口,通過SensorDevice獲取傳感器列表信息后,調(diào)用registerSensor分別將傳感器添加到mSensors中.然后創(chuàng)建 Looper , Looper用來監(jiān)聽傳感器數(shù)據(jù)的上報(bào)和分發(fā),接著調(diào)用run方法,啟動(dòng)threadLoop,輪詢HAL層傳感器數(shù)據(jù)的上報(bào).來看一下SensorService的threadLoop

SensorService的流程圖

getDefaultSensor/getSensorList
SensorManager.java中的getDefaultSensor方法是依賴getSensorlist實(shí)現(xiàn)的,來看一下getSensorlist方法.

registerListener
SensorManager.java向應(yīng)用提供的registerListener方法,最終會(huì)調(diào)到SystemSensorManager中的registerListenerImpl方法,

創(chuàng)建一個(gè)與looper,listener相關(guān)聯(lián)的SensorEventQueue,看一下SensorEventQueue的構(gòu)造函數(shù),

接著看它的基類baseEventQueue和它的nativeInitbaseEventQueue方法.

nativeInitSensorEventQueue中,有兩件事要注意,1.創(chuàng)建SensorEventQueue對(duì)象2.創(chuàng)建Receiver.先看一下SensorEventQueue的創(chuàng)建

SensorManager通過mSensorServer(它是在SensorManager構(gòu)造函數(shù)里getService獲得)的createSensorEventConnection接口,創(chuàng)建一個(gè)SensorEventConnection對(duì)象,它是SensorService的內(nèi)部類,在SensorService::enable中被添加,用來在接收到的HAL層的數(shù)據(jù)發(fā)送出去的重要通道.接著創(chuàng)建一個(gè)與這個(gè)SensorEventConnection對(duì)象關(guān)聯(lián)的SensorEventQueue對(duì)象,并返回.Native層的SensorEventQueue是非常重要的數(shù)據(jù)通道,一方面接收Native層SensorService發(fā)送過來的數(shù)據(jù)(SensorService的數(shù)據(jù)來自HAL層),另一方面將數(shù)據(jù)分發(fā)到framewrok層SystemSensorManager的baseEventQueue子類對(duì)象中.后面會(huì)通過代碼說明這個(gè)過程如何發(fā)生.接著看Receiver類,Receiver構(gòu)造函數(shù)

Receiver構(gòu)造函數(shù)中,主要建立與SensorService和MessageQueue之間的關(guān)聯(lián),接著看它的onFirstRef.

Native層的MessageQueue調(diào)用Looper類的addFd方法,添加對(duì)SensorEventQueue的監(jiān)聽,看一下looper的addFd方法.

Receiver繼承LooperCallback并實(shí)現(xiàn)了handleEvent函數(shù),addFD時(shí)會(huì)將callback傳入Looper.Looper的addFd如果被監(jiān)控的文件描述符,已經(jīng)存在用EPOLL_CTL_MOD參數(shù)調(diào)用epoll_ctl修改,否則,EPOLL_CTL_ADD來添加.(Native層的Looper是以epoll為核心實(shí)現(xiàn)的,對(duì)Looper不熟悉的可以看一下epoll的簡(jiǎn)介).Looper在添加文件描述符后,后續(xù)通過pollOnce或pollAll接口來訪問,最終都會(huì)調(diào)用pollInner來等待這些文件描述符被寫入數(shù)據(jù),我們來看一下pollInner

在Looper中epoll_wait來監(jiān)聽文件描述符是否有數(shù)據(jù)寫入,當(dāng)有數(shù)據(jù)寫入后,調(diào)用callback的handleEvent方法來進(jìn)行處理,這里是調(diào)用了Receiver的handleEvent方法,handleEvent中依賴于SensorEventQueue中的mSensorChannel(mSensorChannel是在SensorEventConnection構(gòu)造時(shí)創(chuàng)建的)來實(shí)現(xiàn)數(shù)據(jù)的讀取的,mSensorChannel是一個(gè)BitTube對(duì)象,BitTube提供全雙工的跨進(jìn)程的通訊管道(這里對(duì)它做了一個(gè)說明,有興趣可以了解一下),handleEvent依賴它來獲取發(fā)送過來的數(shù)據(jù)(數(shù)據(jù)從哪發(fā)來?我們后面再說),我們看一下Receiver的handleEvent接口

上面會(huì)根據(jù)不同類型的傳感器將數(shù)據(jù)進(jìn)行處理,常用傳感器通過 gbaseEventQueueClassInfo.dispatchSensorEvent進(jìn)行分發(fā),這里實(shí)際上是調(diào)用的framework層的SensorEventQueue類(繼承baseEventQueue)的dispatchSensorEvent方法.

dispatchSensorEvent里,通過handle找到對(duì)應(yīng)的sensor,將數(shù)據(jù)通過SensorEventListener的onSensorChanged將數(shù)據(jù)給應(yīng)用程序.
回顧一下前面的流程,Looper通過epoll_wait將數(shù)據(jù)讀出,回調(diào)Receiver的handleEvent函數(shù),handleEvent調(diào)用SensorEventQueuem的read方法讀取數(shù)據(jù),然后通過JNI回調(diào)framework層SensorEventQueue的dispatchSensorEvent方法,在dispatchSensorEvent方法中回調(diào)SensorEventListener的onSensorChanged方法,這個(gè)方法為應(yīng)用注冊(cè)的監(jiān)聽方法,將數(shù)據(jù)返回到應(yīng)用層.可是是誰(shuí)將數(shù)據(jù)寫入Looper監(jiān)控的文件描述符中的?我們接著看一下這個(gè)過程.之前說過”handleEvent調(diào)用SensorEventQueue的read方法讀取數(shù)據(jù)”,讀取和寫入都依賴于BitTube對(duì)象,它在SensorEventConnection構(gòu)造函數(shù)中創(chuàng)建(mChannel),然后SensorEventQueue通過getSensorChannel()接口獲取該對(duì)象,(這里可以按照mSensorChannel的線索,反推寫入數(shù)據(jù)的地方,接下來直接描述結(jié)果),SensorService在onFirstRef最后執(zhí)行了run,threadLoop開始運(yùn)行,這個(gè)函數(shù)上面分析過了,在最后時(shí)

SensorEventConnection的sendEvents方法會(huì)將數(shù)據(jù)寫入BitTube中

到這里傳感器數(shù)據(jù)的寫入,讀取流程分析完畢.
這里在簡(jiǎn)述一下數(shù)據(jù)的完整流程:SensorService的threadLoop線程,循環(huán)通過SensorDevice的poll接口,從HAL層獲取傳感器數(shù)據(jù),然后調(diào)用已建立好的傳感器連接通道SensorEventConnection的sendEvents方法,寫入到BitTube的socketpai通道中,Looper函數(shù)的epoll_wait被喚醒,然后回調(diào)Receiver的handleEvent方法,在該方法中SensorEventQueue會(huì)讀取socketpai通道里的數(shù)據(jù),調(diào)用JNI調(diào)用framework層的SensorEventQueue的dispatchSensorEvent方法,在此方法中回調(diào)SensorEventListener的onSensorChanged方法和onAccuracyChanged,這兩個(gè)方法就是應(yīng)用程序注冊(cè)的方法.
傳感器HAL層的AOSP部分包括sensor.h,接下來看一下這個(gè)文件內(nèi)容.

HAL層關(guān)鍵結(jié)構(gòu)和接口
HAL層中關(guān)鍵的結(jié)構(gòu)和接口存在sensor.h文件中,包括:sensor_module_t、sensors_poll_device_1、get_sensors_list等

sensor.h
sensor_module_t

sensors_poll_device_1

sensors_poll_device_1_t兼容老1.0版本sensors_poll_device_t,并提供了新版本接口batch,flush,inject_sensor_data接口.
- get_sensors_list

獲取所有sensor的列表,由*list指向,傳遞給上層使用.又的平臺(tái)是靜態(tài)方式注冊(cè)list,有的平臺(tái)動(dòng)態(tài)方式注冊(cè).

set_operation_mode

模式設(shè)置接口,用來將sensor service注入的數(shù)據(jù)返回.因傳感器數(shù)據(jù)來自于底層硬件,這個(gè)方式多用于調(diào)試或特殊功能,多數(shù)平臺(tái)不實(shí)現(xiàn)這個(gè)接口.

sensor_t

這個(gè)結(jié)構(gòu)體在實(shí)現(xiàn)hal層代碼時(shí),參數(shù)已又英文注釋,重點(diǎn)關(guān)注handle、type、minDelay、flags.

sensors_event_t

傳感器數(shù)據(jù)上報(bào)的結(jié)構(gòu)體,注意sensor和sensors_vec_t,sensor變量對(duì)應(yīng)的是handle,如果不匹配將無法被上層enable,sensors_vec_t中的status默認(rèn)為0,需要設(shè)置為大于0的狀態(tài),否則上層會(huì)將數(shù)據(jù)丟棄,status可選參數(shù)如下

HAL層以下部分各SOC廠商實(shí)現(xiàn)方式不同(有些走input,有些走IIO,有些走share memory),這里不繼續(xù)追述.

android 傳感器 源碼:android各傳感器開發(fā),顯示返回?cái)?shù)據(jù) 碼農(nóng)集市專業(yè)分享IT編程學(xué)習(xí)資源

關(guān)于碼農(nóng)集市

本站旨在為廣大IT學(xué)習(xí)愛好者提供一個(gè)非營(yíng)利性互相學(xué)習(xí)交流分享平臺(tái)。本站所有資源都可以被免費(fèi)獲取學(xué)習(xí)研究。本站資源來自網(wǎng)友分享,僅供學(xué)習(xí)研究,請(qǐng)務(wù)必在下載后24小時(shí)內(nèi)給予刪除,不得用于其他任何用途,否則后果自負(fù)?;诨ヂ?lián)網(wǎng)的特殊性,coder100無法對(duì)用戶傳輸?shù)淖髌?、信息、?nèi)容的權(quán)屬或合法性、安全性、合規(guī)性、真實(shí)性、科學(xué)性、完整權(quán)、有效性等進(jìn)行實(shí)質(zhì)審查;無論coder100經(jīng)營(yíng)者是否已進(jìn)行審查,用戶均應(yīng)自行承擔(dān)因其傳輸?shù)淖髌?、信息、?nèi)容而可能或已經(jīng)產(chǎn)生的侵權(quán)或權(quán)屬糾紛等法律責(zé)任。本站所有資源不代表本站的觀點(diǎn)或立場(chǎng),基于網(wǎng)友分享,根據(jù)中國(guó)法律《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》第二十二條之規(guī)定,若資源存在侵權(quán)或相關(guān)問題請(qǐng)聯(lián)系本站客服人員,#qq.com,請(qǐng)把#換成@,本站將給予最大的支持與配合,做到及時(shí)反饋和處理。關(guān)于更多版權(quán)及免責(zé)申明參見  版權(quán)及免責(zé)申明

android 傳感器 源碼:[實(shí)戰(zhàn)示例] 帶您深入探討 Android 傳感器【附源碼】

轉(zhuǎn)自:
Android 是一個(gè)面向應(yīng)用程序開發(fā)的富平臺(tái),它擁有許多具有吸引力的用戶界面元素和數(shù)據(jù)管理功能。Android 還提供了一組豐富的接口選項(xiàng)。
在本文中,學(xué)習(xí)如何配合使用 Android 的各種傳感器選項(xiàng)監(jiān)控您的環(huán)境。樣例代碼展示了如何在 Android 電話中錄制音頻。想構(gòu)建自己的監(jiān)視器嗎?想用聲音來接聽電話或者打開房門嗎?請(qǐng)學(xué)習(xí)如何利用配備有 Android 的設(shè)備的硬件功能。
對(duì)于 Java? 開發(fā)人員來說,Android 平臺(tái)是通過使用硬件傳感器創(chuàng)建創(chuàng)新應(yīng)用程序的理想平臺(tái)。我們將學(xué)習(xí)一些可用于 Android 應(yīng)用程序的接口連接選項(xiàng),包括使用傳感器子系統(tǒng)和錄制音頻片段。
利用配備 Android 的設(shè)備的硬件功能可以構(gòu)建哪些應(yīng)用程序呢?任何需要電子監(jiān)視和監(jiān)聽的應(yīng)用程序都可以構(gòu)建。嬰兒監(jiān)視器、安全系統(tǒng),甚至地震儀都可以。理論上講,您不能同時(shí)出現(xiàn)在兩個(gè)地方,但 Android 可以利用一些可行的方法實(shí)現(xiàn)這一點(diǎn)??v觀本文始末,您必須記住,使用的 Android 設(shè)備不僅僅局限于 “手機(jī)”,還可以是部署在固定位置、具有無線網(wǎng)絡(luò)連接的設(shè)備,比如 EDGE 或 WiFi。請(qǐng)下載附件中本文示例的源代碼。
Android 傳感器功能
使用 Android 平臺(tái)有一個(gè)很新穎的地方,那就是您可以在設(shè)備內(nèi)部訪問一些“好工具”。過去,訪問設(shè)備底層硬件的能力一度讓移動(dòng)開發(fā)人員感到非常棘手。盡管 Android Java 環(huán)境的角色仍然是您和設(shè)備的橋梁,但Android 開發(fā)團(tuán)隊(duì)讓許多硬件功能浮出了水面。該平臺(tái)是一個(gè)開源平臺(tái),因此您可以自由地編寫代碼實(shí)現(xiàn)您的任務(wù)。
如果尚未安裝 Android,您可以 下載     Android SDK。您還可以 瀏覽 android.hardware 包的內(nèi)容并參考本文的示例。android.media 包 包含了一些提供有用和新穎功能的類。
Android SDK 中包含的一些面向硬件的功能描述如下。
表 1. Android SDK 中提供的面向硬件的特性
特性
描述
android.hardware.Camera
允許應(yīng)用程序與相機(jī)交互的類,可以截取照片、獲取預(yù)覽屏幕的圖像,修改用來治理相機(jī)操作的參數(shù)。
android.hardware.SensorManager
允許訪問 Android 平臺(tái)傳感器的類。并非所有配備 Android 的設(shè)備都支持 SensorManager 中的所有傳感器,雖然這種可能性讓人非常興奮。(可用傳感器的簡(jiǎn)介見下文)
android.hardware.SensorListener
在傳感器值實(shí)時(shí)更改時(shí),希望接收更新的類要實(shí)現(xiàn)的接口。應(yīng)用程序?qū)崿F(xiàn)該接口來監(jiān)視硬件中一個(gè)或多個(gè)可用傳感器。例如,本文中的 代碼 包含實(shí)現(xiàn)該接口的類,實(shí)現(xiàn)后可以監(jiān)視設(shè)備的方向和內(nèi)置的加速表。
android.media.MediaRecorder
用于錄制媒體樣例的類,對(duì)于錄制特定位置(比如嬰兒保育)的音頻活動(dòng)非常有用。還可以分析音頻片段以便在訪問控件或安全應(yīng)用程序時(shí)進(jìn)行身份鑒定。例如,它可以幫助您通過聲音打開門,以節(jié)省時(shí)間,不需要從房產(chǎn)經(jīng)紀(jì)人處獲取鑰匙。
android.FaceDetector
允許對(duì)人臉(以位圖形式包含)進(jìn)行基本識(shí)別的類。不可能有兩張完全一樣的臉。可以使用該類作為設(shè)備鎖定方法,無需記密碼 — 這是手機(jī)的生物特征識(shí)別功能。
android.os.*
包含幾個(gè)有用類的包,可以與操作環(huán)境交互,包括電源管理、文件查看器、處理器和消息類。和許多可移動(dòng)設(shè)備一樣,支持 Android 的電話可能會(huì)消耗大量電能。讓設(shè)備在正確的時(shí)間 “醒來” 以監(jiān)視感興趣的事件是在設(shè)計(jì)時(shí)需要首先關(guān)注的方面。
java.util.Date
java.util.Timer
java.util.TimerTask
當(dāng)測(cè)量實(shí)際的事件時(shí),數(shù)據(jù)和時(shí)間往往很重要。例如,java.util.Date 類允許您在遇到特定的事件或狀況時(shí)獲取時(shí)間戳。您可以使用 java.util.Timer 和 java.util.TimerTask 分別執(zhí)行周期性任務(wù)或時(shí)間點(diǎn)任務(wù)。

android.hardware.SensorManager 包含幾個(gè)常量,這表示 Android 傳感器系統(tǒng)的不同方面,包括:傳感器類型方向、加速表、光線、磁場(chǎng)、臨近性、溫度等。采樣率最快、游戲、普通、用戶界面。當(dāng)應(yīng)用程序請(qǐng)求特定的采樣率時(shí),其實(shí)只是對(duì)傳感器子系統(tǒng)的一個(gè)提示,或者一個(gè)建議。不保證特定的采樣率可用。準(zhǔn)確性高、低、中、不可靠。
SensorListener 接口是傳感器應(yīng)用程序的中心。它包括兩個(gè)必需方法:
onSensorChanged(int sensor,float values[]) 方法在傳感器值更改時(shí)調(diào)用。該方法只對(duì)受此應(yīng)用程序監(jiān)視的傳感器調(diào)用(更多內(nèi)容見下文)。該方法的參數(shù)包括:一個(gè)整數(shù),指示更改的傳感器;一個(gè)浮點(diǎn)值數(shù)組,表示傳感器數(shù)據(jù)本身。有些傳感器只提供一個(gè)數(shù)據(jù)值,另一些則提供三個(gè)浮點(diǎn)值。方向和加速表傳感器都提供三個(gè)數(shù)據(jù)值。
當(dāng)傳感器的準(zhǔn)確性更改時(shí),將調(diào)用 onAccuracyChanged(int sensor,int accuracy) 方法。參數(shù)包括兩個(gè)整數(shù):一個(gè)表示傳感器,另一個(gè)表示該傳感器新的準(zhǔn)確值。

要與傳感器交互,應(yīng)用程序必須注冊(cè)以偵聽與一個(gè)或多個(gè)傳感器相關(guān)的活動(dòng)。注冊(cè)使用 SensorManager 類的 registerListener 方法完成。本文中的源代碼中演示了如何注冊(cè)和注銷 SensorListener。
記住,并非所有支持 Android 的設(shè)備都支持 SDK 中定義的所有傳感器。如果某個(gè)傳感器無法在特定的設(shè)備上使用,您的應(yīng)用程序就會(huì)適當(dāng)?shù)亟导?jí)。
傳感器示例
樣例應(yīng)用程序僅監(jiān)控對(duì)方向和加速表傳感器的更改(見源代碼)。當(dāng)收到更改時(shí),傳感器值在 TextView 小部件的屏幕上顯示。
圖 1 展示了該應(yīng)用程序的運(yùn)行情況。
圖 1.  監(jiān)視加速和方向

使用 Eclipse 環(huán)境和 Android Developer Tools 插件創(chuàng)建的應(yīng)用程序。清單 1 展示了該應(yīng)用程序的代碼。
清單 1. IBMEyes.java

package com.msi.ibm.eyes;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.hardware.SensorManager;
import android.hardware.SensorListener;
public class IBMEyes extends Activity implements SensorListener {
final String tag="IBMEyes";
SensorManager sm=null;
TextView xViewA=null;
TextView yViewA=null;
TextView zViewA=null;
TextView xViewO=null;
TextView yViewO=null;
TextView zViewO=null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
  // get reference to SensorManager
sm=(SensorManager) getSystemService(SENSOR_SERVICE);
setContentView(R.layout.main);
xViewA=(TextView) findViewById(R.id.xbox);
yViewA=(TextView) findViewById(R.id.ybox);
zViewA=(TextView) findViewById(R.id.zbox);
xViewO=(TextView) findViewById(R.id.xboxo);
yViewO=(TextView) findViewById(R.id.yboxo);
zViewO=(TextView) findViewById(R.id.zboxo);
}
public void onSensorChanged(int sensor, float[] values) {
synchronized (this) {
Log.d(tag, "onSensorChanged: " + sensor + ", x: " +
values[0] + ", y: " + values[1] + ", z: " + values[2]);
if (sensor==SensorManager.SENSOR_ORIENTATION) {
xViewO.setText("Orientation X: " + values[0]);
yViewO.setText("Orientation Y: " + values[1]);
zViewO.setText("Orientation Z: " + values[2]);
}
if (sensor==SensorManager.SENSOR_ACCELEROMETER) {
xViewA.setText("Accel X: " + values[0]);
yViewA.setText("Accel Y: " + values[1]);
zViewA.setText("Accel Z: " + values[2]);
}
}
}

public void onAccuracyChanged(int sensor, int accuracy) {
Log.d(tag,"onAccuracyChanged: " + sensor + ", accuracy: " + accuracy);
}
@Override
protected void onResume() {
super.onResume();
 // register this class as a listener for the orientation and accelerometer sensors
sm.registerListener(this,
SensorManager.SENSOR_ORIENTATION |SensorManager.SENSOR_ACCELEROMETER,
SensorManager.SENSOR_DELAY_NORMAL);
}

@Override
protected void onStop() {
// unregister listener
sm.unregisterListener(this);
super.onStop();
}
}

編寫應(yīng)用程序必須基于常見的活動(dòng),因?yàn)樗皇抢脧膫鞲衅鳙@取的數(shù)據(jù)更新屏幕。在設(shè)備可能在前臺(tái)執(zhí)行其他活動(dòng)的應(yīng)用程序中,將應(yīng)用程序構(gòu)建為服務(wù)可能更加合適。
該活動(dòng)的 onCreate 方法可以引用 SensorManager,其中包含所有與傳感器有關(guān)的函數(shù)。onCreate 方法還建立了對(duì) 6 個(gè) TextView 小部件的引用,您需要使用傳感器數(shù)據(jù)值更新這些小部件。

onResume() 方法使用對(duì) SensorManager 的引用通過 registerListener 方法注冊(cè)傳感器更新:
第一個(gè)參數(shù)是實(shí)現(xiàn) SensorListener 接口的類的實(shí)例。
第二個(gè)參數(shù)是所需傳感器的位掩碼。在本例中,應(yīng)用程序從 SENSOR_ORIENTATION 和 SENSOR_ACCELEROMETER 請(qǐng)求數(shù)據(jù)。
第三個(gè)參數(shù)是一個(gè)系統(tǒng)提示,指出應(yīng)用程序更新傳感器值所需的速度。

應(yīng)用程序(活動(dòng))暫停后,需要注銷偵聽器,這樣以后就不會(huì)再收到傳感器更新。這通過 SensorManager 的 unregisterListener 方法實(shí)現(xiàn)。惟一的參數(shù)是 SensorListener 的實(shí)例。
在 registerListener 和 unregisterListener 方法調(diào)用中,應(yīng)用程序使用關(guān)鍵字 this。注意類定義中的 implements 關(guān)鍵字,其中聲明了該類實(shí)現(xiàn) SensorListener 接口。這就是要將它傳遞到 registerListener 和 unregisterListener 的原因。

SensorListener 必須實(shí)現(xiàn)兩個(gè)方法 onSensorChange 和 onAccuracyChanged。示例應(yīng)用程序不關(guān)心傳感器的準(zhǔn)確度,但關(guān)注傳感器當(dāng)前的 X、Y 和 Z 值。onAccuracyChanged 方法實(shí)質(zhì)上不執(zhí)行任何操作;它只在每次調(diào)用時(shí)添加一個(gè)日志項(xiàng)。
似乎經(jīng)常需要調(diào)用 onSensorChanged方法,因?yàn)榧铀俦砗头较騻鞲衅髡诳焖侔l(fā)送數(shù)據(jù)。查看第一個(gè)參數(shù)確定哪個(gè)傳感器在發(fā)送數(shù)據(jù)。確認(rèn)了發(fā)送數(shù)據(jù)的傳感器之后,將使用方法第二個(gè)參數(shù)傳遞的浮點(diǎn)值數(shù)組中所包含的數(shù)據(jù)更新相應(yīng)的 UI元素。該示例只是顯示這些值,但在更加高級(jí)的應(yīng)用程序中,還可以分析這些值,比較原來的值,或者設(shè)置某種模式識(shí)別算法來確定用戶(或外部環(huán)境)的行為。
現(xiàn)在您已經(jīng)了解了傳感器子系統(tǒng),接下來的部分將回顧一個(gè)在 Android 手機(jī)上錄制音頻的代碼樣例。該樣例運(yùn)行在 DEV1 開發(fā)設(shè)備上。
使用 MediaRecorder

android.media 包包含與媒體子系統(tǒng)交互的類。使用 android.media.MediaRecorder 類進(jìn)行媒體采樣,包括音頻和視頻。MediaRecorder 作為狀態(tài)機(jī)運(yùn)行。您需要設(shè)置不同的參數(shù),比如源設(shè)備和格式。設(shè)置后,可執(zhí)行任何時(shí)間長(zhǎng)度的錄制,直到用戶停止。

清單 2 包含的代碼在 Android 設(shè)備上錄制音頻。顯示的代碼不包括應(yīng)用程序的 UI 元素(見源代碼)。
清單 2. 錄制音頻片段

MediaRecorder mrec ;
File audiofile=null;
private static final String TAG="SoundRecordingDemo";
protected void startRecording() throws IOException
{
  mrec.setAudioSource(MediaRecorder.AudioSource.MIC);
  mrec.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
  mrec.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
  if (mSampleFile==null)
  {
  File sampleDir=Environment.getExternalStorageDirectory();
  try
  {
 audiofile=File.createTempFile("ibm", ".3gp", sampleDir);
  }
  catch (IOException e)
  {
  Log.e(TAG,"sdcard access error");
  return;
  }
  }
  mrec.setOutputFile(audiofile.getAbsolutePath());
  mrec.prepare();
  mrec.start();
}
protected void stopRecording()
{
  mrec.stop();
  mrec.release();
  processaudiofile(audiofile.getAbsolutePath());
}
protected void processaudiofile()
{
  ContentValues values=new ContentValues(3);
  long current=System.currentTimeMillis();
  values.put(MediaStore.Audio.Media.TITLE, "audio" + audiofile.getName());
  values.put(MediaStore.Audio.Media.DATE_ADDED, (int) (current / 1000));
  values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/3gpp");
  values.put(MediaStore.Audio.Media.DATA, audiofile.getAbsolutePath());
  ContentResolver contentResolver=getContentResolver();

Uri base=MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
  Uri newUri=contentResolver.insert(base, values);

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, newUri));
}

在 startRecording 方法中,實(shí)例化并初始化 MediaRecorder 的實(shí)例:
輸入源被設(shè)置為麥克風(fēng)(MIC)。
輸出格式被設(shè)置為 3GPP(*.3gp 文件),這是移動(dòng)設(shè)備專用的媒體格式。
編碼器被設(shè)置為 AMR_NB,這是音頻格式,采樣率為 8 KHz。NB 表示窄頻。SDK 文檔 解釋了不同的數(shù)據(jù)格式和可用的編碼器。

音頻文件存儲(chǔ)在存儲(chǔ)卡而不是內(nèi)存中。External.getExternalStorageDirectory() 返回存儲(chǔ)卡位置的名稱,在該目錄中將創(chuàng)建一個(gè)臨時(shí)文件名。然后,通過調(diào)用 setOutputFile 方法將文件關(guān)聯(lián)到 MediaRecorder 實(shí)例。音頻數(shù)據(jù)將存儲(chǔ)到該文件中。

調(diào)用 prepare 方法完成 MediaRecorder 的初始化。準(zhǔn)備開始錄制流程時(shí),將調(diào)用 start 方法。在調(diào)用 stop 方法之前,將對(duì)存儲(chǔ)卡上的文件進(jìn)行錄制。release 方法將釋放分配給 MediaRecorder 實(shí)例的資源。
音頻采樣完成之后,需要采取以下步驟:
向設(shè)備的媒體庫(kù)添加該音頻。
執(zhí)行一些模式識(shí)別步驟確定聲音:
這是嬰兒的啼哭聲嗎?
這是所有人的聲音嗎?是否要解鎖手機(jī)?
這是 “芝麻開門” 嗎?是否要打開通往 “秘密通道” 的大門?
自動(dòng)將音頻文件上傳到網(wǎng)絡(luò)位置以便處理。

在該代碼樣例中,processaudiofile 方法將音頻添加到媒體庫(kù)。使用 Intent 通知設(shè)備上的媒體應(yīng)用程序有新內(nèi)容可用。

關(guān)于該代碼片段最后要注意的是:如果您試用,它一開始不會(huì)錄制音頻。您將看到創(chuàng)建的文件,但是沒有任何音頻。
您需要向 AndroidManifest.xml 文件添加權(quán)限:

現(xiàn)在,您已經(jīng)學(xué)了一點(diǎn)關(guān)于與 Android 傳感器和錄制音頻相關(guān)的內(nèi)容。下一節(jié)將更全面的介紹與數(shù)據(jù)采集和報(bào)告系統(tǒng)有關(guān)的應(yīng)用程序架構(gòu)。
Android 作為傳感器平臺(tái)

Android 平臺(tái)包含各種用于監(jiān)視環(huán)境的傳感器選項(xiàng)。有了輸入或模擬選項(xiàng)數(shù)組,以及高級(jí)計(jì)算和互聯(lián)功能,Android 成為構(gòu)建實(shí)際系統(tǒng)的最佳平臺(tái)。
圖 2 顯示了輸入、應(yīng)用程序邏輯、通知方法或輸出之間的簡(jiǎn)單視圖。

圖 2. 以 Android 為中心的傳感器系統(tǒng)的方塊圖

該架構(gòu)很靈活;應(yīng)用程序邏輯可以劃分為本地 Android 設(shè)備和服務(wù)器端資源(可以實(shí)現(xiàn)更大的數(shù)據(jù)庫(kù)和計(jì)算功能)。
例如,本地 Android 設(shè)備上錄制的音軌可以 POST 到 Web 服務(wù)器,其中將根據(jù)音頻模式數(shù)據(jù)庫(kù)比較數(shù)據(jù)。很明顯,這僅僅是冰山一角。希望您能更深入地研究,讓 Android 平臺(tái)超越移動(dòng)電話的范疇。
結(jié)束語(yǔ)

在本文中,我們介紹了 Android 傳感器。樣例應(yīng)用程序度量了方向和加速,以及使用 MediaRecorder 類與錄制功能進(jìn)行交互。對(duì)于構(gòu)建實(shí)際系統(tǒng),Android 是一個(gè)靈活、有吸引力的平臺(tái)。Android 領(lǐng)域發(fā)展迅速,并且不斷壯大。請(qǐng)務(wù)必關(guān)注該平臺(tái)。
android 傳感器 源碼:Android傳感器源碼分析(AOSP)  第2張

android 傳感器 源碼:分享一套源碼十多種安卓傳感器如何使用的源碼十分全面

private long lastUpdateTime;
// 手機(jī)上一個(gè)位置時(shí)重力感應(yīng)坐標(biāo)
private float lastX;
private float lastY;
private float lastZ;
Vibrator vibrator;
// 速度閾值,當(dāng)搖晃速度達(dá)到這值后產(chǎn)生作用
private static final int SPEED_SHRESHOLD=1000;
// 兩次檢測(cè)的時(shí)間間隔
private static final int UPTATE_INTERVAL_TIME=70;
private DevicePolicyManager deviceManager;
// private boolean isAdmin;
private PowerManager pm;
public void onSensorChanged(SensorEvent event) {
// 現(xiàn)在檢測(cè)時(shí)間
long currentUpdateTime= System.currentTimeMillis();
// 兩次檢測(cè)的時(shí)間間隔
long timeInterval=currentUpdateTime - lastUpdateTime;
// 判斷是否達(dá)到了檢測(cè)時(shí)間間隔
// if (timeInterval < UPTATE_INTERVAL_TIME)        // return;        // 現(xiàn)在的時(shí)間變成last時(shí)間        lastUpdateTime= currentUpdateTime;        // 獲得x,y,z坐標(biāo)        float x=event.values[0];        float y=event.values[1];        float z=event.values[2];        // if (Math.abs(x) > 9.0 || Math.abs(y) > 9.0) {
// Log.e("onSensorChanged", Math.abs(x)+"::"+Math.abs(y));
// Log.e("onSensorChanged", isAdmin+"");
// if (!isAdmin) {
// Log.e("onSensorChanged", isAdmin+"");
// deviceManager.lockNow();
// // deviceManager.resetPassword("", 0);
// }
// }
//
// 獲得x,y,z的變化值
float deltaX=x - lastX;
float deltaY=y - lastY;
float deltaZ=z - lastZ;
// Log.e("onSensorChanged", deltaX+
// "::::"+deltaY+"::::::"+deltaZ+"::::"+timeInterval);
// 將現(xiàn)在的坐標(biāo)變成last坐標(biāo)
lastX= x;
lastY = y;
lastZ = z;

// double riderSpeed=Math.sqrt(deltaX * deltaX + deltaY * deltaY +
// deltaZ * deltaZ);
//
// if (riderSpeed > 5) {
// // 按照自己需求設(shè)置屏幕的亮度
// toggleBrightness(this);
// Log.e(TAG, brightness + ":::" +
// isAutoBrightness(this.getContentResolver()));
// Log.e("執(zhí)行車友的拿手機(jī)的動(dòng)作", riderSpeed + "");
// // pm.goToSleep(SystemClock.uptimeMillis());
// new Handler().postDelayed(new Runnable() {
//
// @Override
// public void run() {
//
// wake.release();
//
// }
// }, 50);// 在釋放的時(shí)候異常了
// }

下一篇: PLC、DCS、FCS三大控

上一篇: 電氣控制線路圖控制原

推薦產(chǎn)品

更多
主站蜘蛛池模板: 五月婷婷激情综合 | 久久久久久久久久影院 | 国内精品国产三级国产aⅴ久 | 欧美精品在线免费观看 | 欧美视频日韩 | 精品国产人成亚洲区 | 成人性做爰aaa片免费看 | 爱情岛论坛自拍 | 我要看黄色1级片 | 久草在线免费福利 | 国产粉嫩av | 成人羞羞国产免费网站 | 亚洲激情二区 | 免费黄色国产 | 香港三级精品三级在线专区 | 已婚少妇美妙人妻系列 | 午夜av在线免费观看 | 极品尤物一区二区三区 | 中国国语毛片免费观看视频 | 国产精品久久视频 | 久久五月激情 | 在线视频日韩 | 亚洲自拍色图 | 狠狠做五月深爱婷婷 | 欧美精品啪啪 | 最新av片 | 久久久精品99久久精品36亚 | 大屁股熟女一区二区三区 | 久久性| 五十路熟妇亲子交尾 | 黄色影视频 | 中文字幕一区二区三区免费视频 | 男同志毛片特黄毛片 | 国产九九av | 日本大香伊一区二区三区 | 后进极品圆润翘臀在线播放 | 日韩精品在线免费视频 | 亚洲国产精品久久精品成人网站 | 国产午夜精品理论片 | 四虎1515hh海外永久免费 | 天堂网视频在线观看 | 日韩黄色网络 | 一级黄色免费毛片 | 一级成人欧美一区在线观看 | 国产亚洲欧美视频 | 丝袜老师办公室里做好紧好爽 | 美女的尿囗网站免费 | 毛片免费视频观看 | 国产精品视频一区二区三区无码 | 欧美人与禽zoz0善交找视频 | 中日韩精品视频在线观看 | 免费一级黄 | 免费观看添你到高潮视频 | 国产特级毛片aaaaaa高潮流水 | 国产亚洲精品精品国产亚洲综合 | 美女流白浆视频 | 天堂аⅴ在线最新版在线 | 久久aⅴ国产欧美74aaa | 亚洲国产成人精品无码区在线秒播 | 亚洲男女一区二区三区 | 精品国产乱码久久久久久老虎 | av中文字幕网址 | 亚洲精品动漫成人3d无尽在线 | a级淫片一二三区在线播放 a天堂v | 久久夜色精品国产www红杏 | 国产免费一级特黄录像 | 欧美日韩亚洲在线观看 | 爱久久av一区二区三区 | 日本一区二区高清不卡 | 国内自在二三区 | 国产精品一二三区成毛片视频 | 国产日韩欧美日韩大片 | 国产成人高清在线 | 日韩性xxx | 97夜夜澡人人爽人人喊中国片 | 搞av网| 影音先锋在线看片资源 | 日本在线播放 | 久草视频在线观 | 国产精品一区二区久久乐下载 | 国产精品入口香蕉 | 久久精品成人一区二区三区蜜臀 | 性色av免费观看 | 亚洲精品少妇久久久久久 | 亚洲综合区 | 国产精品毛片久久久久久久 | 国产网站免费在线观看 | 欧美乱妇狂野欧美视频 | 7k7k在线看片午夜 | 国产又黄又硬又湿又黄 | 无码国产伦一区二区三区视频 | 爱爱视频在线免费观看 | 亚洲精品一区中文字幕 | 久久精品国产精品亚洲毛片 | a天堂视频在线观看 | 中文字幕一区二区在线播放 | 日韩久久无码免费毛片软件 | 国产一区二区三区久久久久久久久 | 久久久精品国产sm调教网站 | 成人精品一区二区三区中文字幕 | 国产成人av无码精品 | 日日干夜夜干 | 欧美精品一区二区三区免费视频 | 欧美精品一区二区三区四区五区 | 亚洲欧美日韩一区二区三区在线 | 亚洲成a人片在线观看www | 人人爽人人爽人人片av东京热 | 国产小视频在线观看免费 | 久久91久久久久麻豆精品 | 五月婷婷色丁香 | 久久久综合视频 | 亚洲黄色大全 | 欧美性猛交一区二区三区精品 | 日狠狠| 欧美一区二区三区四 | 11月流出美女撒尿偷拍在线播放 | 在线无码va中文字幕无码 | 亚洲欧美国产精品18p | 亚洲视频在线看 | 婷婷色五 | 黄色一级网 | 国产伦子伦对白在线播放观看 | 中文无码人妻有码人妻中文字幕 | 粉嫩av国产一区二区三区 | 德国艳星videos极品hd | 亚洲欧美一区二区爽爽爽 | 亚洲国产视频一区二区三区 | 玖玖视频网 | 看成人片 | 色视频网 | 国产九九 | 波多野结衣一区二区三区免费视频 | 黄色一级视频免费 | 久久久精品久久久久久 | 扶她futa粗大做到怀孕 | 双性大乳浪受古代h男男 | 啪一啪射一射插一插 | 少妇又紧又爽视频 | 超碰在线影院 | 欧美一区二区高清视频 | 黄色动漫在线免费观看 | 尤物视频网站在线观看 | 欧美性xxxx在线播放 | 欧美一区二区三区粗大 | 伊人中文字幕无码专区 | 黄色免费观看网站 | 久在线精品视频线观看 | 国产成人精品123区免费视频 | 精品国产一区二区三区不卡 | 欧美69精品久久久久久不卡 | 久久99精品久久久久久秒播放器 | 欧美高清久久 | 久久久久免费精品国产 | 亚洲婷婷在线观看 | 欧美三级毛片 | 99只有精品 | 亚洲激情欧美激情 | 久久久不卡国产精品一区二区 | 欧美 日韩 国产 精品 | 一本色道无码道dvd在线观看 | 特黄视频在线观看 | 日本一卡二卡视频 | 在线午夜| 国产精品xx | 国产精品久久久久久久久电影网 | 99精品无人区乱码在线观看 | 成人三级毛片 | 97变态冷s各种国产调教 | 久久久一区二区 | 国产av新搬来的白领女邻居 | 永久黄网站色视频免费 | aaa在线播放 | 午夜视频黄| 国产精品久久久久久吹潮 | 一品二品三品中文字幕 | 好了av在线第四站综合网站 | 国产午夜精品一区二区三区欧美 | 葵司有码中文字幕二三区 | 1000部免费毛片在线播放 | 色无极亚洲影院 | 久久精品九九精av | 免费在线日本 | 国产李沁av在线播放 | 香港三级日本三级韩国三级 | 特黄少妇60分钟在线观看播放 | 久久综合狠狠色综合伊人 | 男女性高爱潮免费网站 | 国产精品爽爽久久久久久竹菊 | 成熟丰满少妇激情xxxx | 亚洲高清在线免费观看 | 欧美一级免费在线 | 精品午夜久久久 | 久热国产精品视频 | 日本久久一区二区 | 色乱码一区二区三区麻豆 | 日日日日做夜夜夜夜做无码 | 大又大又粗又硬又爽少妇毛片 | 亚洲第一页综合图片自拍 | 国产69精品久久久久毛片 | 乱短篇艳辣500篇h文最新章节 | 日韩欧美国产一区二区在线观看 | 精品无码国模私拍视频 | 中文无码精品一区二区三区 | 欧美性猛交xxxⅹ丝袜 | 久久精品老司机 | 两个女人互相吃奶摸下面 | 波多野结衣激情视频 | 久久精品人人做人人爱爱站长工具 | 免费网站观看www在线观 | 亚洲精品久久久久久中文传媒 | 日日插夜夜爽 | 综合久久久久久久久 | 黄色福利站 | 中文字幕精品三级久久久 | youjizz中国丰满少妇 | 欧美少妇18p | 免费在线播放黄色片 | 人妻美妇疯狂迎合系列视频 | 伊人中文字幕 | 九九自拍偷拍 | 一本之道av | 天天拍天天爽 | 久草福利免费 | 日韩成人毛片在线 | 超碰c| 成人国产一区二区三区 | 国产毛片又黄又爽 | 超碰91人人 | 久久久久国产精 | 2022国产成人精品视频人 | 性网站在线观看 | av免费提供| 色婷婷久久久亚洲一区二区三区 | 永久国产 | 国产成人综合久久久久久 | 午夜精品久久久久久久99热蜜臀 | 国产免费色视频 | 麻豆传谋在线观看免费mv | 水蜜桃色314在线观看 | 动漫3d精品一区二区三区乱码 | 椎名由奈一区二区在线 | 欧美日韩在线视频免费观看 | 婷婷久久精品 | 日韩美女乱淫aaa高清视频 | 欧美日韩一区二区三区四区 | 少妇高潮惨叫久久久久久 | 久久一区二区三 | 亚洲精品第三页 | 动漫3d精品一区二区三区乱码 | 91丨porny丨对白 | 91爱看| 大波大乳videos巨大 | 久久久国产乱子伦精品作者 | 日韩一级免费毛片 | 天天爱天天操 | 久久久久免费观看 | 国产精品99精品久久免费 | 综合图区亚洲欧美另类图片 | 亚洲一区二区三区视频在线 | 精品国产免费看 | 天堂国产一区二区三区 | 欧美一区二区久久久 | 婷婷开心激情综合五月天 | 久久精品亚洲中文无东京热 | 色偷偷一区二区无码视频 | 国产精品ww| 国产91网| 中国丰满人妻videoshd | 18禁黄无码免费网站高潮 | 丁香五香天堂综合小说 | 久久一区二区三区精华液使用 | 男女下面一进一出无遮挡 | 天天色亚洲 | 亚洲国产成人久久一区二区三区 | 人人妻人人澡人人爽 | 亚洲最大成人综合 | 亚洲国产一区二区精品 | 九九爱爱视频 | 免费观看bbb毛片大全 | 中文国产日韩精品av片 | 高清精品国内视频 | 中文字幕人成人乱码亚洲影视的特点 | 暖暖免费观看日本版 | 黑人粗长大战亚洲女 | 正在播放国产一区 | 女十八毛片 | 欧美拍拍视频 | 六月丁香色婷婷 | 白天躁晚上躁麻豆视频 | 亚洲福利在线视频 | 97在线观看免费高清 | 99福利| 美女扣逼喷水视频 | 最近2019中文字幕大全第二页 | 日韩人妻熟女毛片在线看 | 狠狠干,狠狠操 | 久久久久久久久免费视频 | 精精国产xxxx视频在线播放 | 日韩中文字幕一区二区 | 日韩乱码在线观看 | 欧美一级三级 | 超碰在线综合 | 手机av免费 | 亚洲中文字幕无码爆乳av | 欧美在线影院 | 免费色视频 | 亚洲天堂国产精品 | 久热av在线 | 久久婷婷成人综合色 | 国产美女精品aⅴ在线播放 国产美女精品人人做人人爽 | 黑人巨大精品欧美一区二区免费 | 日韩成人综合 | 少妇大叫太大太粗太爽了 | 依人综合 | 欧美在线 | 亚洲 | 亚洲v国产v欧美v久久久久久 | 色综合久 | 久久久国产免费 | 就要操av| 日本黄色一级网站 | 亚洲精品久久久久久 | 日本wwwxxx| 韩国精品一区二区三区无码视频 | 乌克兰美女浓毛bbw 九九久久精品国产 | 久久精品在 | jizzxxxx18高清喷水| 69精品国产 | 国产黄色免费 | av观看国产 | 亚洲色p| 欧美成人四级hd版 | 亚洲熟女少妇一区二区 | 欧美v亚洲v日韩v最新在线 | 亚洲三级av| 精品国产不卡一区二区三区 | 国产精品入口夜色视频大尺度 | 国产精品免费久久久久影院 | 探花精品 | 国产精品无码翘臀在线看 | 日本www在线 | 色偷偷噜噜噜亚洲男人 | 亚洲色图17p | 亚洲一区二区三区视频在线 | 国产小视频在线 | 青娱乐精品视频 | 国产无遮挡又黄又爽免费网站 | 亚洲男人的天堂在线观看 | 久久久久久网站 | 亚洲性激情 | 精品中文字幕一区二区 | 伊人精品久久久 | 国产有码在线观看 | 能看av的网站 | 99视屏| 一本大道无码人妻精品专区 | 97免费公开在线视频 | 国产青青操 | 国产免费午夜福利757 | 一区二区三区精 | 久久亚洲一区二区三区成人国产 | 欧美性猛交xxxx乱大交极品 | www.在线观看麻豆 | 麻豆视频观看 | 欧洲av无码放荡人妇网站 | 一二三四在线视频观看社区 | 亚洲精品国产自在久久 | 国产精品夜夜爱 | 国产午夜精品无码一区二区 | 国产精品99久久免费观看 | 一呦二呦三呦精品网站 | 欧美精品福利 | 亚洲情综合五月天 | av女优天堂在线观看 | 黑人爱爱视频 | 天堂а√在线地址中文在线 | 一本大道东京热无码aⅴ | 久久午夜无码鲁丝片午夜精品 | 夜夜躁狠狠躁日日躁aab苏桃 | 在线观看第一页 | 97超碰人人澡人人爱学生 | 久本草在线中文字幕亚洲 | 日本洗澡bbw | 欧美视频观看 | 99re色| 豆麻视频在线免费观看 | 亚洲精品大全 | 丁香五月缴情综合网 | 高清不卡一区二区三区 | 久色阁| 狠狠色图片 | 97精品久久久午夜一区二区三区 | 最新国产毛片 | 亚洲女同一区二区 | 久久网中文字幕日韩精品专区四季 | 韩国三级与黑人 | 欧美性做爰大片免费 | 中文字幕一区二区免费 | 欧美性猛交xxxx乱大交游戏 | 精品欧美色视频网站在线观看 | 一级特黄aa大片 | 国产一级片av | 能看毛片的网站 | 美女在线网站 | 国产成人精品视频在线 | 精品国产一区二区三区色欲 | 边吃奶边添下面好爽 | 一级黄色片毛片 | 在线看的av| 九九九九九精品 | 美玉足脚交一区二区三区图片 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 东京无码熟妇人妻av在线网址 | 午夜爽爽爽视频 | 开心五月色婷婷综合开心网 | 国产模特av私拍大尺度 | 污视频在线观看免费 | 国精产品一二三区精华液 | 国产精品亚洲一区二区在线观看 | 国产一级精品毛片 | 成人羞羞网站入口免费 | 亚洲黄色毛片 | 天天艹天天射 | 亚洲免费成人av | 国产精品一区二区久久乐夜夜嗨 | 人妻巨大乳hd免费看 | 伊人久久超碰 | 久久精品夜色噜噜亚洲a∨ 国产精品人人做人人爽 | 妇女bbbb插插插视频 | 祥仔视觉av | 日日摸夜夜添夜夜添欧美毛片小说 | 精品国产乱码久久久久久久软件 | 97无码免费人妻超级碰碰碰碰 | 视频在线观看一区二区三区 | 国产精品入口麻豆 | 男人的网站在线观看 | 免费a级黄毛片 | 无套在线观看 | 国产在线观看成人 | 欧美一区综合 | 黄色aa视频 | 91av在线免费观看 | 少妇太爽了在线观看 | 成人免费影片 | 狠狠色噜噜狠狠狠狠999米奇 | 少妇淫交裸体视频 | 欧美日韩亚洲激情 | 黑巨人与欧美精品一区 | 中文字幕在线视频播放 | 国产成人夜色高潮福利影视 | 精品亚洲天堂 | 91a天堂资源| 日韩精品视频一区二区三区 | 国产成a人亚洲精品在线观看 | 亚洲你懂得 | 成人免费av片 | 第一福利在线视频 | 免费观看国产黄色片 | 又紧又大又爽精品一区二区 | 亚洲视频免费在线 | 精品在线视频观看 | 啪啪小视频 | 国产综合色视频 | 久久机热精品 | 日韩欧美亚洲国产精品字幕久久久 | 日韩欧美精品在线观看 | 亚洲成人黄色网址 | 成人做爰高潮片免费视频韩国 | 窝窝视频在线 | 成年午夜无码av片在线观看 | 午夜九九| 国产精品久久久久av | 永久免费快色 | 日本丰满老妇bbb | 一级黄色小视频 | 国产超碰人人做人人爱ⅴa 日韩人妻无码精品久久久不卡 | 国产成人麻豆精品午夜福利在线 | 蜜桃综合网| 久久精品女人毛片国产 | 午夜视频网站在线观看 | 国产精品扒开腿做爽爽爽a片唱戏 | 后进极品美女白嫩翘臀 | 天天综合亚洲 | 欧美三级视频在线播放 | 肉色丝袜小早川怜子av | 国产99久久久国产精品下药 | julia在线播放88mav| 久久九九网站 | 国内精品美女a∨在线播放 精品人妻一区二区三区浪潮在线 | 男人激烈吮乳吃奶视频片 | 国产精品午夜8888 | 欧美成人性视频在线播放 | 国产爆初菊在线观看免费视频网站 | 欧美hdse| 国产99久久久国产精品免费高清 | 国产精品亚洲一区二区三区在线 | 中文字幕一区二区三区久久蜜桃 | 欧美激情综合 | 浓毛老太交欧美老妇热爱乱 | 日韩性生交大片免费看 | 国产特级毛片潘金莲 | 狠狠色噜噜狠狠狠8888米奇 | 亚洲一片| 四虎av永久在线精品免费观看 | 91极品国产情侣高潮对白 | 免费欧美一级视频 | 亚洲国产爱 | 欧美狂猛xxxxx乱大交3 | 印度午夜性春猛xxx交 | 亚洲春色综合另类网蜜桃 | 特高潮videossexhd | 国产国产精品人在线视 | 成人特级片 | 91九色porny首页最多播放 | 午夜视频在线观看一区 | 国产精品www在线观看 | 女人扒开屁股爽桶30分钟 | 成人羞羞国产免费 | 韩国av毛片 | 国产网站免费 | www噜噜偷拍在线视频 | 一区二区三区黄 | 三级黄色网| 国产农村乱对白刺激视频 | 亚洲精品中文字幕乱码三区 | 少妇特黄v一区二区三区图片 | 欧美另类z0z变态 | 成在线人av免费无码高潮喷水 | 激情五月少妇a | 欧美视频一二区 | 国产一区二区三区在线观看免费 | 人人超人人超碰超国产97超碰 | 免费高清欧美大片在线观看 | 亚洲免费av片 | 国产又粗又猛又大爽又黄 | www豆花福利视频 | 国产乱淫视频 | 亚洲中文字幕av无码专区 | 可以免费看成人啪啪过程的软件 | 国产精品成人一区二区三区视频 | 又白又嫩毛又多15p 国产热の有码热の无码视频 | 久久久婷婷成人综合激情 | 五月婷婷激情视频 | 麻豆视频一区二区 | 国产精品成人免费一区二区视频 | 麻豆av在线播放张芸熙 | 大陆日韩欧美 | 免费无码又爽又刺激高潮 | 欧美一级色图 | 国产一区二区三区日韩精品 | 2022天天躁狠狠燥 | 在线视频 一区二区 | 欧美叫娇小xx人1314 | 国产超碰人人爽人人做人人爱 | jzzjzzjzz亚洲成孰少妇 | 肉欲性毛片交38 | 泽村玲子av| 五姑娘影院在线观看免费 | 久久这里精品国产99丫e6 | 亚洲尤物在线 | 久久久久综合精品福利啪啪 | 精品无码国产一区二区三区av | 亚洲性少妇性猛交wwww乱大交 | 一本一本久久a久久综合精品 | 成人午夜视频在线免费观看 | 国产精品一区二区av日韩在线 | 美女内射毛片在线看3d | 婷婷性多多影院 | 国产黄a三级三级三级老年人 | 亚洲欧美国产精品 | 亚洲午夜精品一区二区三区 | 岛国av一区二区 | 黄色一毛片 | 99青草 | а天堂中文在线官网 | 在线观看的黄网 | 农村少妇无套内谢粗又长 | 国产深夜福利视频在线 | 国产三级精品片 | 国产一区两区 | av免费国产 | 三级网站免费观看 | 麻豆国产人妻欲求不满谁演的 | 农村末发育av片四区五区 | 欧美日韩四区 | 亚洲第一成人在线 | 狼人青草久久网伊人 | 尤物九九久久国产精品的特点 | 一区二区三区四区日韩 | 99精品国产99久久久久久97 | 中文字幕精品无码一区二区三区 | 中文字幕1区2区 | 欧美日韩在线高清 | 九九色九九 | 久热伊人 | 揄拍成人国产精品视频99 | 天天综合天天做 | 国产色视频一区二区三区qq号 | 国产艳妇av在线观看果冻传媒 | 亚瑟av亚洲精品一区二区 | 很很射影院 | 8ⅹ8x擦拨擦拨成人免费视频 | 红杏aⅴ成人免费视频 | youporn国产在线观看 | 啪啪.com | 朝鲜一级黄色片 | 日韩少妇诱惑 | 欧美人妻aⅴ中文字幕 | 精品国产乱码一区二区 | 99re免费视频 | 狠狠色色综合网站 | 精品无码久久久久久国产 | 亚洲第一网站男人都懂 | 炕上如狼似虎的呻吟声 | 在线观看视频日韩 | 麻豆精品在线播放 |