第六講 Android WiFi與Bluetooth編程基礎(chǔ)_第1頁
第六講 Android WiFi與Bluetooth編程基礎(chǔ)_第2頁
第六講 Android WiFi與Bluetooth編程基礎(chǔ)_第3頁
第六講 Android WiFi與Bluetooth編程基礎(chǔ)_第4頁
第六講 Android WiFi與Bluetooth編程基礎(chǔ)_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第六講 Android WiFi與Bluetooth 編程基礎(chǔ)王偉 一、Android簡介 Android是開源的移動設(shè)備操作系統(tǒng)。支持智能手機(jī)、平板電腦、電視等設(shè)備。人臉識別功能,用戶可以使用自拍照片設(shè)置屏幕鎖?;贜FC的Android Beam功能,可以讓兩部手機(jī)在接近4厘米后交換信息。 一、Android簡介 Android的特征在內(nèi)存和進(jìn)程管理方面,Android具有自己的運行時和虛擬機(jī)。提供了豐富的界面控件。提供輕量級的進(jìn)程間通訊機(jī)制Intent,使用跨進(jìn)程組件通信和發(fā)送系統(tǒng)級廣播成為可能。提供了Service作為無用戶界面、長時間后臺運行的組件。支持高效、快速的數(shù)據(jù)存儲方式。 一

2、、Android簡介 Android的特征提供了通用的共享數(shù)據(jù)接口ContentProvider。支持位置服務(wù)和地圖應(yīng)用。支持Widget插件。Android NDK支持使用本地代碼(C或C+)開發(fā)應(yīng)用程序的部分核心模塊。 一、Android簡介 Android 體系結(jié)構(gòu) 二、Android應(yīng)用程序 工程目錄和文件 二、Android應(yīng)用程序 AndroidManifest.xml 二、Android應(yīng)用程序 AndroidManifest.xmlAndroid程序聲明文件,包含了Android系統(tǒng)運行Android程序前所必須掌握的重要信息,這些信息包括應(yīng)用程序名稱、圖標(biāo)、包名稱、模塊組成、

3、授權(quán)和SDK最低版本等。manifest元素僅能包含一個application元素,application元素中能夠聲明Android程序中最重要的四個組成部分,包括Activity、Service、BroadcastReceiver和ContentProvider。 二、Android應(yīng)用程序 AndroidManifest.xmlactivity元素是對Activity子類的聲明,不在AndroidManifest.xml文件中聲明的Activity將不能夠在用戶界面中顯示。 intent-filter中聲明了兩個子元素action和category,intent-filter使該程序在啟

4、動時將MainActivity作為默認(rèn)啟動模塊。 二、Android應(yīng)用程序 activity_main.xml是界面布局文件。 res目錄是資源目錄,Android程序所有的圖像、顏色、風(fēng)格、主題、界面布局和字符串等資源都保存在子目錄中。 R.java包含對drawable、layout和values目錄內(nèi)的資源的引用指針,Android程序能夠直接通過R類引用目錄中的資源。 二、Android應(yīng)用程序 MainActivity.java是Android工程向?qū)Ц鶕?jù)Activity名稱創(chuàng)建的java文件。完全可以手工修改。為了在Android系統(tǒng)上顯示圖形界面,需要使用代碼繼承Activit

5、y類。并在onCreate()函數(shù)中聲明需要顯示的內(nèi)容。三位一體:描述文件(AndroidManifest.xml),Java源代碼,資源文件。描述文件負(fù)責(zé)宏觀框架,Java負(fù)責(zé)邏輯,資源文件負(fù)責(zé)外觀。 三、Android生命周期 Android組件ActivityAndroid程序的呈現(xiàn)層,顯示可視化的用戶界面,并接收與用戶交互所產(chǎn)生的界面事件。Android應(yīng)用程序可以包含一個或多個Activity,一般需要指定一個程序啟動時顯示的Activity。ServiceService一般用于沒有用戶界面,但需要長時間在后臺運行的應(yīng)用??晒_Service的程序接口,供其它進(jìn)程調(diào)用。 三、Andr

6、oid生命周期BroadcaseReceiver用來接收廣播消息的組件,不包含任何用戶界面。可以啟動Activity或者Notification通知用戶接收到重要信息。ContentProvider是Android系統(tǒng)提供的一種標(biāo)準(zhǔn)的共享數(shù)據(jù)的機(jī)制,其他程序通過ContentProvider訪問程序的私有數(shù)據(jù)。Android系統(tǒng)內(nèi)部提供一些內(nèi)置的ContentProvider,能夠為應(yīng)用程序提供重要的數(shù)據(jù)信息。 三、Android生命周期 程序生命周期Android進(jìn)程從啟動到終止的所有階段,也就是Android程序啟動到停止的全過程。盡可能地不主動終止應(yīng)用程序,即使生命周期結(jié)束的程序也會保存

7、在內(nèi)存中,以便再次快速啟動。Android系統(tǒng)的進(jìn)程優(yōu)先級 三、Android生命周期 Activity生命周期指Activity從啟動到銷毀的過程。Activity表現(xiàn)為四種狀態(tài)活動狀態(tài)暫停狀態(tài)停止?fàn)顟B(tài)非活動狀態(tài) 三、Android生命周期Activity棧 三、Android生命周期Activity生命周期的事件回調(diào)函數(shù)函數(shù)是否可終止說明onCreate()否Activity啟動后第一個被調(diào)用的函數(shù),常用來進(jìn)行Activity的初始化,例如創(chuàng)建View、綁定數(shù)據(jù)或恢復(fù)信息等。onStart()否當(dāng)Activity顯示在屏幕上時,該函數(shù)被調(diào)用。onRestart()否當(dāng)Activity從停止

8、狀態(tài)進(jìn)入活動狀態(tài)前,調(diào)用該函數(shù)。onResume()否當(dāng)Activity可以接受用戶輸入時,該函數(shù)被調(diào)用。onPause()否當(dāng)Activity進(jìn)入暫停狀態(tài)時,該函數(shù)被調(diào)用。主要用來保存持久數(shù)據(jù)、關(guān)閉動畫、釋放CPU資源等。該函數(shù)中的代碼必須簡短,因為另一個Activity必須等待該函數(shù)執(zhí)行完畢后才能顯示在界面上。onStop()是當(dāng)Activity不對用戶可見后,該函數(shù)被調(diào)用,Activity進(jìn)入停止?fàn)顟B(tài)。onDestroy()是在Activity被終止前,即進(jìn)入非活動狀態(tài)前,該函數(shù)被調(diào)用。有兩種情況該函數(shù)會被調(diào)用:(1)當(dāng)程序主動調(diào)用finish()函數(shù);(2)程序被Android系統(tǒng)終結(jié)

9、。 三、Android生命周期Activity事件回調(diào)函數(shù)的調(diào)用順序 三、Android生命周期onRestoreInstanceState()onSaveInstanceState()函數(shù)說明onSaveInstanceState()暫?;蛲V笰ctivity前調(diào)用該函數(shù),用以保存Activity的臨時狀態(tài)信息。onRestoreInstanceState()恢復(fù)onSaveInstanceState()保存的Activity狀態(tài)信息。 三、Android 生命周期 Fragment生命周期在Activity中嵌入小Activity,然后每個小Activity又可以擁有自己的布局。 三、An

10、droid生命周期當(dāng)一個fragment被創(chuàng)建的時候,它會經(jīng)歷以下狀態(tài):onAttach()onCreate()onCreateView()onActivityCreated()當(dāng)這個fragment對用戶可見的時候,它會經(jīng)歷以下狀態(tài):onStart()onResume() 三、Android生命周期當(dāng)這個fragment對用戶不可見的時候,它會經(jīng)歷以下狀態(tài):onPause()onStop()當(dāng)這個fragment被銷毀了(或者持有它的activity被銷毀了),它會經(jīng)歷以下狀態(tài):onPause()onStop()onDestroyView()onDestroy() onDetach() 三、

11、Android生命周期fragments的大部分狀態(tài)都和activitie很相似,但fragment有一些新的狀態(tài)。onAttached(),當(dāng)fragment被加入到activity時調(diào)用(在這個方法中可以獲得所在的activity)。onCreateView(),當(dāng)activity要得到fragment的layout時,調(diào)用此方法,fragment在其中創(chuàng)建自己的layout。onActivityCreated(),當(dāng)activity的onCreated()方法返回后調(diào)用此方法onDestroyView(),當(dāng)fragment中的布局被移除的時候,調(diào)用這個方法。onDetach(),當(dāng)fr

12、agment和activity分離的時候,調(diào)用這個方法。 四、WiFi程序設(shè)計 Android的WiFi架構(gòu)Client調(diào)用方式WiFi的內(nèi)核驅(qū)動程序wpa_supplicant程序WPA適配層WiFi的JNIa.wifi包Settings、WifiSwitcher等應(yīng)用內(nèi)核空間C框架層Java框架層Java應(yīng)用層 四、WiFi程序設(shè)計wpa_supplicantWPA(WiFi Protected Access),是一種基于標(biāo)準(zhǔn)的可互操作的WLAN安全性增強(qiáng)解決方案。wpa_supplicant是WPA的應(yīng)用層認(rèn)證客戶端,負(fù)責(zé)完成認(rèn)證相關(guān)的登錄、加密等工作。wpa_supplicant適配層

13、對wpa_supplicant進(jìn)行封裝,在android中作為WiFi部分的硬件抽象層使用。主要用于封裝與wpa_supplicant守護(hù)進(jìn)程的通信,以提供給android框架使用,它實現(xiàn)了加載、控制和消息監(jiān)控等功能。 四、WiFi程序設(shè)計 WiFi的Java和JNIJNI是Java Native Interface的縮寫,它提供了若干的API實現(xiàn)了和Java和其他語言的通信(主要是C & C+)。API通過調(diào)用wpa_supplicant適配層的接口實現(xiàn)。WiFi系統(tǒng)Java部分的核心是根據(jù)IWifiManager接口創(chuàng)建的Binder服務(wù)器端和客戶端,服務(wù)器端是WifiService,客戶

14、端是WifiManager。 四、WiFi程序設(shè)計 .wifi包中的主要類WifiManager,提供主要的API來管理WiFi連接的的各個方面。主要完成的功能有:(1) 處理已配置好的WiFi網(wǎng)絡(luò)連接列表,可以查看和修改這個列表,列表中項的屬性也可以修改;(2) 處理當(dāng)前激活的WiFi網(wǎng)絡(luò)連接,包括建立連接,關(guān)閉連接,查詢網(wǎng)絡(luò)狀態(tài)等;(3) 獲得AP掃描結(jié)果,這個結(jié)果包括了足夠的信息,依據(jù)這些信息可以決定要接入的AP;(4) 定義了一系列Intent action,用于廣播WiFi狀態(tài)的改變。 四、WiFi程序設(shè)計ScanResult描述掃描到的AP信息,包括AP的地址、SSID、身份認(rèn)證、

15、頻率和信號強(qiáng)度等。WifiConfiguration表示已配置好的WiFi網(wǎng)絡(luò)連接,包括安全配置信息。WifiInfo描述已激活的或者正在建立的WiFi連接狀態(tài)。 四、WiFi程序設(shè)計 WiFi連接流程begin if (設(shè)備(手機(jī))的WiFi功能未打開) 打開WiFi; 掃描AP; 輸出掃描結(jié)果; /* 掃描結(jié)果是一個AP列表 */ /* 連接指定的AP */ if (ssid1 已配置好的WiFi網(wǎng)絡(luò)連接列表) /* ssid1是指定AP的SSID */ 在已配置好的WiFi網(wǎng)絡(luò)連接列表中查詢ssid1的網(wǎng)絡(luò)ID; 用查詢到的ssid1的網(wǎng)絡(luò)ID連接ssid1; else 將ssid1的信

16、息添加進(jìn)已配置好的WiFi網(wǎng)絡(luò)連接列表,同時得到ssid1的網(wǎng)絡(luò)ID; 用ssid1的網(wǎng)絡(luò)ID連接ssid1; 輸出當(dāng)前WiFi連接信息; 斷開連接;end 五、Bluetooth程序設(shè)計 Android的藍(lán)牙架構(gòu)藍(lán)牙驅(qū)動(UART、USB等)藍(lán)牙協(xié)議層bluezbluez適配層android.bluetooth包藍(lán)牙Settings內(nèi)核空間C框架層Java框架層Java應(yīng)用層Headset/Handsfree電話相關(guān)用戶空間D-BUSSCO, Rfcomm SocketHCI等socket 五、Bluetooth程序設(shè)計 藍(lán)牙用戶空間庫bluezLinux平臺上一套完整的藍(lán)牙協(xié)議棧開源實現(xiàn)。

17、bluez底層協(xié)議實現(xiàn)在kernel代碼中,不屬于用戶空間。bluez通過D-BUS IPC機(jī)制來提供應(yīng)用層接口。D-BUS是一套應(yīng)用廣泛的IPC機(jī)制,支持更系統(tǒng)化的服務(wù)名、函數(shù)名等,同時也能對眾多的服務(wù)進(jìn)程和客戶端進(jìn)行管理,調(diào)度通信消息的傳遞。 五、Bluetooth程序設(shè)計 bluez適配層封裝了藍(lán)牙的開關(guān)功能及射頻開關(guān)。 藍(lán)牙的JNI及Java部分藍(lán)牙設(shè)備的發(fā)現(xiàn)、配對和服務(wù)查找等基礎(chǔ)功能。Android.bluetooth包:服務(wù)器端BluetoothDeviceService,客戶端BluetoothDevice。 五、Bluetooth程序設(shè)計Android藍(lán)牙Java部分和底層的關(guān)

18、系bluezBluetoothDevicebluez適配層BluetoothDeviceService.JNID-BUSBluetoothDeviceService.JNIBluetoothEventLoopBluetoothDeviceServiceD-BUSandroid.bluetoothIBluetoothDevice 五、Bluetooth程序設(shè)計Android.bluetooth包類說明BluetoothAdapter藍(lán)牙適配器(本地藍(lán)牙適配器)BluetoothClass藍(lán)牙類(主要包括服務(wù)和設(shè)備)BluetoothClass.Device藍(lán)牙設(shè)備類BluetoothClass.

19、Device.Major藍(lán)牙設(shè)備管理BluetoothClass.Service藍(lán)牙服務(wù)類BluetoothDevice藍(lán)牙設(shè)備(主要指遠(yuǎn)程藍(lán)牙設(shè)備)BluetoothServerSocket監(jiān)聽藍(lán)牙連接的類BluetoothSocket藍(lán)牙連接類 五、Bluetooth程序設(shè)計 藍(lán)牙程序設(shè)計步驟取得藍(lán)牙適配器BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();if (mBluetoothAdapter = null) / Device does not support Bluetooth打開藍(lán)牙i

20、f (!mBluetoothAdapter.isEnabled() Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); 五、Bluetooth程序設(shè)計使藍(lán)牙可發(fā)現(xiàn)Intent discoverableIntent = newIntent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);discoverableIntent.putExtr

21、a(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);startActivity(discoverableIntent);搜索周邊藍(lán)牙設(shè)備查詢已配對的藍(lán)牙設(shè)備Set pairedDevices = mBluetoothAdapter.getBondedDevices();/ If there are paired devicesif (pairedDevices.size() 0) / Loop through paired devices for (BluetoothDevice device : pairedDevices) / Add

22、the name and address to an array adapter to show in a ListView mArrayAdapter.add(device.getName() + n + device.getAddress(); 五、Bluetooth程序設(shè)計搜索其它藍(lán)牙設(shè)備mBluetoothAdapter.startDiscovery();/ Create a BroadcastReceiver for ACTION_FOUNDprivate final BroadcastReceiver mReceiver = new BroadcastReceiver() publ

23、ic void onReceive(Context context, Intent intent) String action = intent.getAction(); / When discovery finds a device if (BluetoothDevice.ACTION_FOUND.equals(action) / Get the BluetoothDevice object from the Intent BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); / Add the name and address to an array adapter to show in a ListView mArrayAdapter.add(device.getName() + n + device.getAddress();

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論