




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、本文我們將通過學習Android的藍牙聊天示例應用程序來介紹藍牙開發包的使用,該示例程序完整的包含了藍牙開發的各個部分,將實現兩個設備通過藍牙進行連接并聊天。AndroidManifest.xml前面我們說過,在使用藍牙API時就需要開啟某些權限,同時我們還可以從AndroidManifest.xml文件中找到應用程序啟動時所進入的界面Activity等信息,因此下面我們首先打開AndroidManifest.xml文件,代碼如下:復制到剪貼板Java代碼1. manifestxmlns:android="roid"package="com.example.and
2、roid.BluetoothChat"android:versionCode="1"android:versionName="1.0"><!-最小的sdk版本->><uses-sdkminSdkVersion="6"/><!-權限申明->><uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN"/><uses-permissionandroid:name=&qu
3、ot;android.permission.BLUETOOTH"/><applicationandroid:label="string/app_name"android:icon="drawable/app_icon"><!-默認Activity->><activityandroid:name=".BluetoothChat"android:label="string/app_name"android:configChanges="orientation
4、|keyboardHidden"><intent-filter><actionandroid:name="ent.action.MAIN"/><categoryandroid:name="ent.category.LAUNCHER"/></intent-filter></activity><!-用于顯示藍牙設備列表的Activity-><activityandroid:name=".DeviceListAct
5、ivity"android:label="string/select_device"android:theme="android:style/Theme.Dialog"android:configChanges="orientation|keyboardHidden"/></application></manifest>首先minSdkVersion用于說明該應用程序所需要使用的最小SDK版本,這里設置為6,也就是說最小需要使用android1.6版本的sdk,同時Ophone則需要使用oms2
6、.0版本,然后打開了BLUETOOTH和BLUETOOTH_ADMIN兩個藍牙操作相關的權限,最后看到了兩個Activity的聲明,他們分別是BluetoothChat(默認主Activity)和DeviceListActivity(顯示設備列表),其中DeviceListActivity風格被定義為一個對話框風格,下面我們將分析該程序的每個細節。BluetoothChat首先,程序啟動進入BluetoothChat,在onCreate函數中對窗口進行了設置,代碼如下:復制到剪貼板Java代碼1./設置窗口布局requestWindowFeature(Window.FEATURE_CUSTOM
7、_TITLE);setContentView(R.layout.main);getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.custom_title);這里可以看到將窗口風格設置為自定義風格了,并且指定了自定義title布局為custom_title,其定義代碼如下:復制到剪貼板Java代碼1.<RelativeLayoutxmlns:android="s/android"android:layout_width="match_parent"android:layout_
8、height="match_parent"><TextViewandroid:id=ut_alignParentLeft="true"gleLine="true"style=android:gravity="center_vertical""+id/title_left_text"android:layoandroid:ellipsize="end"android:sinlayout_width="wrap_content"android:la
9、yout_height="match_parent"android:layout_weight="1"/><TextViewandroid:id=+id/title_right_text"android:ellipsize="end"yout_width="wrap_content"android:layout_alignParentRight=android:singleLine="true"android:layout_height=t"android:tex
10、tColor="#fff"/></RelativeLayout>android:layout_weight="true"android:lamatch_paren"1"該布局將title設置為一個相對布局RelativeLayout,其中包含了兩個TextView,一個在左邊一個在右邊,分別用于顯示應用程序的標題稱,如下圖所示。title和當前的藍牙配對鏈接名"?android:attr/windowTitleStyle"android:其中左邊顯示為應用程序名稱"BluetoothCh
11、at",右邊顯示一個connected:scort則表示當前配對成功正在進行聊天的鏈接名稱。整個聊天界面的布局在main.xml中實現,代碼如下:復制到剪貼板Java代碼1.<LinearLayoutxmlns:android="android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><!-顯示設備列表-><Lis
12、tViewandroid:id="+id/in"android:layout_width="match_parent"android:layout_height="match_parent"android:stackFromBottom="true"android:transcriptMode="alwaysScroll"android:layout_weight="1"/><!-顯示發送消息的編輯框-><LinearLayoutandroid:ori
13、entation="horizontal"android:layout_width="match_parent"android:layout_height="wrap_content"><EditTextandroid:id="+id/edit_text_out"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1&q
14、uot;android:layout_gravity="bottom"/><Buttonandroid:id="+id/button_send"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="string/send"/></LinearLayout></LinearLayout>整個界面的布局將是一個線性布局LinearLayout,
15、其中包含了另一個ListView(用于顯示聊天的對話信息)和另外一個線性布局來實現一個發送信息的窗口,發送消息發送框有一個輸入框和一個發送按鈕構成。整個界面如下圖所示。布局好界面,下面我們需要進入編碼狀態,首先看BluetoothChat所要那些成員變量,如下代碼所示:復制到剪貼板Java代碼1.publicclassBluetoothChatextendsActivity/DebuggingprivatestaticfinalStringTAG="BluetoothChat"privatestaticfinalbooleanD=true;/從BluetoothChatSe
16、rviceHandler發送的消息類型publicstaticfinalintMESSAGE_STATE_CHANGE=1;publicstaticfinalintMESSAGE_READ=2;publicstaticfinalintMESSAGE_WRITE=3;publicstaticfinalintMESSAGE_DEVICE_NAME=4;publicstaticfinalintMESSAGE_TOAST=5;/從BluetoothChatServiceHandler接收消息時使用的鍵名(鍵-值模型)publicstaticfinalStringDEVICE_NAME="de
17、vice_name"publicstaticfinalStringTOAST="toast"/Intent請求代碼(請求鏈接,請求可見)privatestaticfinalintREQUEST_CONNECT_DEVICE=1;privatestaticfinalintREQUEST_ENABLE_BT=2;/LayoutViewsprivateTextViewmTitle;privateListViewmConversationView;privateEditTextmOutEditText;privateButtonmSendButton;/鏈接的設備的名稱p
18、rivateStringmConnectedDeviceName=null;/ArrayadapterfortheconversationthreadprivateArrayAdapter<String>mConversationArrayAdapter;/將要發送出去的字符串privateStringBuffermOutStringBuffer;/本地藍牙適配器privat/聊天服務的對象/log打印日志用,其他部分,它是我們自己定義的一個eBluetoothAdaptermBluetoothAdapter=null;privateBluetoothChatServicemCha
19、tService=null;其中Debugging部分則將用于我們在調試程序時通過我們都加入了注釋,需要說明的是BluetoothChatService用來管理藍牙的端口監聽,鏈接,管理聊天的程序,后面我們會介紹。在這里需要說明一點,這些代碼都出自google的員工之手,大家在學習時,可以借鑒很多代碼編寫的技巧和風格,這都將對我們有非常大的幫助。然后,我們就需要對界面進行一些設置,如下代碼將用來設置我們自定義的標題title需要顯示的內容:復制到剪貼板Java代碼1./設置自定義title布局mTitle=(TextView)findViewById(R.id.title_left_text)
20、;mTitle.setText(R.string.app_name);mTitle=(TextView)findViewById(R.id.title_right_text);左邊的TextView被設置為顯示應用程序名稱,右邊的則需要我們在鏈接之后在設置更新,目前則顯示沒有鏈接字樣,所以這里我們暫不設置,進一步就需要獲取本地藍牙適配器BluetoothAdapter了,因為對于有關藍牙的任何操作都需要首先獲得該藍牙適配器,獲取代碼非常簡單,如下:復制到剪貼板Java代碼1./得到一個本地藍牙適配器mBluetoothAdapter=BluetoothAdapter.getDefaultAda
21、pter();/如果適配器為null,則不支持藍牙if(mBluetoothAdapter=null)Toast.makeText(this,"Bluetoothisnotavailable",Toast.LENGTH_LONG).show();finish。;return;getDefaultAdapter()函數用于獲取本地藍牙適配器,然后檢測是否為null,如果為null則表示沒有藍牙設備的支持,將通過toast告知用戶。在onStart()函數中,我們將檢測藍牙是否被打開,如果沒有打開,則請求打開,否則就可以設置一些聊天信息的準備工作,代碼如下:Overridepu
22、blicvoidonStart()super.onStart();if(D)Log.e(TAG,"+ONSTART+");/如果藍牙沒有打開,則請求打開/setupChat()willthenbecalledduringonActivityResultif(!mBluetoothAdapter.isEnabled()IntentenableIntent=newIntent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivityForResult(enableIntent,REQUEST_ENABLE_BT);/否貝U,設置
23、聊天會話elseif(mChatService=null)setupChat();如果藍牙沒有打開,我們貝U通過BluetoothAdapter.ACTION_REQUEST_ENABLE來請求打開藍牙,REQUEST_ENABLE_BT則是我們自己定義的用于請求打開藍牙的Intent代碼,最后當我們調用startActivityForResult來執行請求時,就會在onActivityResult函數中得到一個反饋,如果當前藍牙已經打開,那么就可以調用setupChat函數來準備藍牙聊天相關的工作,稍后分析該函數的具體實現。下面我們分析一下請求打開藍牙之后,在onActivityResult
24、中得到的反饋信息,我們傳遞了REQUEST_ENABLE_BT代碼作為請求藍牙打開白命令,因此在onActivityResult中,需要會得到一個請求代碼為如下代碼所示:REQUEST_ENABLE_B的消息,對于其處理復制到剪貼板Java代碼1. caseREQUEST_ENABLE_BT:/在請求打開藍牙時返回的代碼2. if(resultCode=Activity.RESULT_OK)3. /藍牙已經打開,所以設置一個聊天會話4. setupChat();5. else6. /請求打開藍牙出錯7. Log.d(TAG,"BTnotenabled");8. Toast.
25、makeText(this,R.string.bt_not_enabled_leaving,Toast.LENGTH_SHORT).show();9. finish();10. 在請求時,如果返回代碼為Activity.RESULT_OK,則表示請求打開藍牙成功,那么我們就可以和上面的操作進度一樣,調用setupChat來設置藍牙聊天相關信息,如果返回其他代碼,則表示請求打開藍牙失敗,這時我們同樣通過一個Toast來告訴用戶,同時也需要調用finish()函數來結束應用程序。如果打開藍牙無誤,那么下面我們開始進入setupChat的設置,其代碼實現如下:復制到剪貼板Java代碼1. priva
26、tevoidsetupChat()Log.d(TAG,"setupChat。");/初始化對話進程mConversationArrayAdapter=newArrayAdapter<String>(this,R.layout.message);/初始化對話顯示列表mConversationView=(ListView)findViewById(R.id.in);/設置話顯示列表源mConversationView.setAdapter(mConversationArrayAdapter);/初始化編輯框,并設置一個監聽,用于處理按回車鍵發送消息mOutEditT
27、ext=(EditText)findViewById(R.id.edit_text_out);mOutEditText.setOnEditorActionListener(mWriteListener);/初始化發送按鈕,并設置事件監聽mSendButton=(Button)findViewById(R.id.button_send);mSendButton.setOnClickListener(newOnClickListener()publicvoidonClick(Viewv)/取彳TTextView中的內容來發送消息TextViewview=(TextView)findViewById
28、(R.id.edit_text_out);Stringmessage=view.getText().toString();sendMessage(message););/初始化BluetoothChatService并執行藍牙連接mChatService=newBluetoothChatService(this,mHandler);/初始化將要發出的消息的字符串mOutStringBuffer=newStringBuffer("");首先構建一個話進程mConversationArrayAdapter,然后從xml中取得用于顯示對話信息的列表mConversationVie
29、w,最后將列表的數據來源Adapter設置為mConversationArrayAdapter,這里我們可以看至UmConversationArrayAdapter所指定的資源為message.xml,其定義實現如下:復制到剪貼板Java代碼1.<TextViewxmlns:android="roid"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="18sp"android:pad
30、ding="5dp"/>很簡單,就包含了一個TextView用來顯示對話內容即可,這里設置了文字標簽的尺寸大小textSize和padding屬性。然后我們取得了編輯框mOutEditText,用于輸入聊天內容的輸入框,并對其設置了一個事件監聽mWriteListener,其監聽函數的實現如下:復制到剪貼板Java代碼1./TheactionlistenerfortheEditTextwidget,tolistenforthereturnkeyprivateTextView.OnEditorActionListenermWriteListener=newTextVie
31、w.OnEditorActionListener()publicbooleanonEditorAction(TextViewview,intactionId,KeyEventevent)/按下回車鍵并且是按鍵彈起的事件時發送消息if(actionId=EditorInfo.IME_NULL&&event.getAction()=KeyEvent.ACTION_UP)Stringmessage=view.getText().toString();sendMessage(message);if(D)Log.i(TAG,"ENDonEditorAction");r
32、eturntrue;首先在其監聽中實現了onEditorAction函數,我們通過判斷其參數actionId來確定事件觸發的動作,其中的"EditorInfo.IME_NULL"在Ophone中表示回車鍵消息,然后再加上KeyEvent.ACTION_UP,則表示當用戶按下回車鍵并彈起時才觸發消息的處理,處理過程也很簡單,將輸入框中內容取出到變量message中,然后調用sendMessage函數來發送一條消息,具體的發送細節,我們稍后分析。在setupChat函數中,我們還對發送消息的按鈕進行的初始化,同樣為其設置了事件監聽(setOnClickListener),監聽的
33、內容則也是取得輸入框中的信息,然后調用sendMessage函數來發送消息,和用戶按回車鍵來發送消息一樣。最后一個重要的操作就是初始化了BluetoothChatService對象mChatService用來管理藍牙的鏈接,聊天的操作,并且設置了其Handler對象mHandler來負責數據的交換和線程之間的通信。另外還準備了一個空的字符串對象mOutStringBuffer,用于當我們在發送消息之后,對輸入框的清理。應用菜單該應用程序除了這些界面的布局之外,我們還為其設置了一個菜單,菜單包括了"掃描設備"和"使設備可見(能夠被其他設備所搜索到)",創建
34、菜單的方式有很多種,這里gogole的員工,比較喜歡和推崇使用xml布局(將界面和邏輯分開),所以我們首先看一下對于該應用程序通過xml所定義的菜單布局,代碼如下:復制到剪貼板Java代碼1.<menuxmlns:android="d"><!-掃描菜單-><itemandroid:id="+id/scan"android:icon="android:drawable/ic_menu_search"android:title="string/connect"/><!-可見操作
35、-><itemandroid:id="+id/discoverable"android:icon="android:drawable/ic_menu_mylocation"android:title="string/discoverable"/></menu>這樣的定義的確非常的清晰,我們可以隨意向這個Menu中添加菜單選項(itme),這里就定義了上面我們所說的兩個菜單。然后再程序中通過onCreateOptionsMenu函數中來裝載該菜單布局,遂于菜單的點擊可以通過onOptionsItemSele
36、cted函數的不同參數來辨別,下面是該應用程序中對菜單選項的處理和裝載菜單布局:復制到剪貼板Java代碼1./創建一個菜單OverridepublicbooleanonCreateOptionsMenu(Menumenu)MenuInflaterinflater=getMenuInflater();inflater.inflate(R.menu.option_menu,menu);returntrue;/處理菜單事件OverridepublicbooleanonOptionsItemSelected(MenuItemitem)switch(item.getItemId()caseR.id.sc
37、an:/啟動DeviceListActivity查看設備并掃描IntentserverIntent=newIntent(this,DeviceListActivity.class);startActivityForResu代(serverIntent,REQUEST_CONNECT_DEVICE);returntrue;caseR.id.discoverable:/確保設備處于可見狀態ensureDiscoverable();returntrue;returnfalse;裝載菜單布局的時候使用了MenuInflater對象,整個過程很簡單,大家可以參考上面的代碼實現,在處理菜單事件的時候,通過
38、item.getItemId()我們可以得到當前選擇的菜單項的ID,首先是掃描設備(R.id.scan),這里我們有啟動了另外一個Activity來專門處理掃描設備DeviceListActivity,如果掃描之后我們將通過startActivityForResult函數來請求鏈接該設備,同樣我們也會在onActivityResult函數中收到一個反饋信息,命令代碼為REQUEST_CONNECT_DEVICE,如果反饋的請求代碼為Activity.RESULT_OK,則表示掃描成功(掃描過程我們稍后介紹),那么下面就可以開始準備鏈接了,實現代碼如下:復制到剪貼板Java代碼1.caseREQ
39、UEST_CONNECT_DEVICE:/當DeviceListActivity返回設備連接if(resultCode=Activity.RESULT_OK)/從Intent中得到設備的MAC地址Stringaddress=data.getExtras().getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS);/得至U藍牙設備對象BluetoothDevicedevice=mBluetoothAdapter.getRemoteDevice(address);/嘗試連接這個設備mChatService.connect(device);break;首
40、先我們可以通過DeviceListActivity.EXTRA_DEVICE_ADDRESS來取得設備的Mac地址,然后通過Mac地址使用藍牙適配器mBluetoothAdapter的getRemoteDevice函數來查找到該地址的設備BluetoothDevice,查詢到之后我們可以通過mChatService對象的connect來鏈接該設備。般藍牙設備在打開之后都需要設上面我們說的是掃描藍牙設備并鏈接的過程,置可見狀態,下面我們來看一下另一個菜單選項的實現,用于使設備處于可見狀態,其菜單項的ID為R.id.discoverable,具體實現過程則位于ensureDiscoverable函
41、數中,其實現如下代碼:復制到剪貼板Java代碼1.privatevoidensureDiscoverable()if(D)Log.d(TAG,"ensurediscoverable");/判斷掃描模式是否為既可被發現又可以被連接if(mBluetoothAdapter.getScanMode()!=BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE)/請求可見狀態IntentdiscoverableIntent=newIntent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
42、/添加附加屬性,可見狀態的時間discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,300);startActivity(discoverableIntent);這里首先通過mBluetoothAdapter.getScanMode()函數取得該藍牙的掃描模式,然后通過BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE設置可見屬性,在這里我們加入一個附加屬性BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,用來設置可見狀態的時
43、間,表示在指定的時間中藍牙處于可見狀態,設置好之后通過startActivity來執行即可。這里憂一個需要注意的問題,在鏈接某個設備之前,我們需要開啟一個端口監聽,該應用程序將其放在onResume()函數中來處理了,代碼如下:復制到剪貼板Java代碼1.OverridepublicsynchronizedvoidonResume()super.onResume();if(D)Log.e(TAG,"+ONRESUME+");/PerformingthischeckinonResume()coversthecaseinwhichBTwas/notenabledduringon
44、Start(),sowewerepausedtoenableit./onResume()willbecalledwhenACTION_REQUEST_ENABLEactivityreturns.if(mChatService!=null)/如果當前狀態為STATE_NONE,則需要開啟藍牙聊天服務if(mChatService.getState()=BluetoothChatService.STATE_NONE)/開始一個藍牙聊天服務mChatService.start();首先卞測mChatService是否被初始化,然后檢測其狀態是否為STATE_NONE,STATE_NONE表示初始化之
45、后處于等待的狀態,當我們在setupChat函數中初始時,其實就已經將其狀態設置為STATE_NONE了(該操作是在BluetoothChatService的構造函數中處理的),所以這里就可以通過一個start函數來啟動一個進程即可,實際上就是啟動了一個端口監聽進程,當有設備連接時,該監聽進程結束,然后轉向鏈接進程,鏈接之后同樣又將轉換到一個聊天管理進程。本文主要包括以下兩個部分的內容:其一,分析掃描設備部分DeviceListActivity,其二,分析具體的聊天過程的完整通信方案,包括端口監聽、鏈接配對、消息發送和接收等,如果有對上一篇文章不太熟悉的,可以返回去在過一次,這樣會有利于本文的
46、理解。設備掃描(DeviceListActivity)在上一篇文章的介紹中,當用戶點擊了掃描按鈕之后,則會執行如下代碼:復制到剪貼板Java代碼1./啟動DeviceListActivity查看設備并掃描Intentserverintent=newIntent(this,DeviceListActivity.class);startActivityForResult(serverintent,REQUEST_CONNECT_DEVICE);該代碼將跳轉到DeviceListActivity進行設備的掃描,并且通過REQUEST_CONNECT_DEVICE來請求鏈接掃描到的設備。從Androi
47、dManifest.xml文件中我們知道DeviceListActivity將為定義為一個對話框的風格,下圖是該應用程序中,掃描藍牙設備臼*的|日公53*的截圖。其中DeviceListActivity則為圖中對話框部分,其界面的布局如下代碼所示。復制到剪貼板Java代碼1.<LinearLayoutxmlns:android="android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="
48、match_parent"><!-已經配對的設備-><TextViewandroid:id="+id/title_paired_devices"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="string/title_paired_devices"android:visibility="gone"android:background=&quo
49、t;#666"android:textColor="#fff"android:paddingLeft="5dp"/><!-已經配對的設備信息-><ListViewandroid:id="+id/paired_deviandroid:layout_heices"android:layout_width="match_parent"ght="wrap_content"layout_weight="1"<TextViewandroid:id=
50、width="match_parent"android:stackFromBottom="true"android:/><!-掃描出來沒有經過配對的設備->"+id/title_new_devices"android:layout_android:layout_height="wrap_content"android:text="string/title_other_devices"android:visibility="gone"android:backg
51、round="#666"android:textColor="#fff"android:paddingLeft="5dp"/><!-掃描出來沒有經過配對的設layout_width="match_parent"nt"android:stackFromBottom=2"/><!-掃描按鈕->_scan"android:layout_width=android:layout_height="wrap_conte"true"andr
52、oid:layout_weight=<Buttonandroid:id="+id/buttonmatch_parent"android:layout_height="wrap_content"android:text="string/button_scan"/></LinearLayout>備信息-><ListViewandroid:id="+id/new_devices"android:該布局整體由一個線性布局LinearLayout組成,其中包含了兩個textview中來顯示
53、已經配對的設備和信掃描出來的設備(還沒有經過配對)和兩個ListView分別用于顯示已經配對和沒有配對的設備的相關信息。按鈕則用于執行掃描過程用,整個結構很簡單,下面我們開始分析如何編碼實現了。同樣開始之前,我們先確定該類中的變量的作用,定義如下:復制到剪貼板Java代碼1.publicclassDeviceListActivityextendsActivity/DebuggingprivatestaticfinalStringTAG="DeviceListActivity"privatestaticfinalbooleanD=true;/ReturnIntentextra
54、publicstaticStringEXTRA_DEVICE_ADDRESS="device_address"/藍牙適配器privateBluetoothAdaptermBtAdapter;/已經配對的藍牙設備privateArrayAdapter<String>mPairedDevicesArrayAdapter;/新的藍牙設備privateArrayAdapter<String>mNewDevicesArrayAdapter;其中Debugging部分,同樣用于調試,這里定義了一個EXTRA_DEVICE_ADDRESS,用于在通過Intent傳
55、遞數據時的附加信息,即設備的地址,當掃描出來之后,返回到BluetoothChat中的0nAetivityResult函數的REQUEST_CONNECT_DEVICE命令,這是我們就需要通過DeviceListActivity.EXTRA_DEVICE_ADDRESS來取得該設備的Mac地址,因此當我們掃描完成之后在反饋掃描結果時就需要綁定設備地址作為EXTRA_DEVICE_ADDRESS的附加值,這和我們上一篇介紹的并不矛盾。另外其他幾個變量則分別是本地藍牙適配器、已經配對的藍牙列表和掃描出來還沒有配對的藍牙設備列表,稍后我們可以看到對他們的使用。進入DeviceListActivity
56、之后我們首先分析onCreate,首先通過如下代碼對窗口進行了設置:復制到剪貼板Java代碼1./設置窗口requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);setContentView(R.layout.device_list);setResult(Activity.RESULT_CANCELED);這里我們設置了窗口需要帶一個進度條,當我們在掃描時就看有很容易的高速用戶掃描進度。具體布局則設置為device_list.xml也是我們文本第一段代碼的內容,接下來首先初始化掃描按鈕,代碼如下:復制到剪貼板Java代碼1./初始
57、化掃描按鈕ButtonscanButton=(Button)findViewById(R.id.button_scan);scanButton.setOnClickListener(newOnClickListener()publicvoidonClick(Viewv)doDiscovery();v.setVisibility(View.GONE););首先取得按鈕對象,然后為其設置一個事件監聽,當事件觸發時就通過doDiscovery函數來執行掃描操作即可,具體掃描過程稍后分析。然后需要初始化用來顯示設備的列表和數據源,使用如下代碼即可:復制到剪貼板Java代碼1./初始化ArrayAdap
58、ter,一個是已經配對的設備,一個是新發現的設備mPairedDevicesArrayAdapter=newArrayAdapter<String>(this,R.layout.device_name);mNewDevicesArrayAdapter=newArrayAdapter<String>(this,R.layout.device_name);/檢測并設置已配對的設備ListViewListViewpairedListView=(ListView)findViewById(R.id.paired_devices);pairedListView.setAdapte
59、r(mPairedDevicesArrayAdapter);pairedListView.setOnItemClickListener(mDeviceClickListener);/檢查并設置行發現的藍牙設備ListViewListViewnewDevicesListView=(ListView)findViewById(R.id.new_devices);newDevicesListView.setAdapter(mNewDevicesArrayAdapter);newDevicesListView.setOnItemClickListener(mDeviceClickListener);并
60、分別對這些列表中的選項設置了監聽mDeviceClickListener,用來處理,當選擇該選項時,就進行鏈接和配對操作。既然是掃描,我們就需要對掃描的結果進行監控,這里我們構建了一個廣播BroadcastReceiver來對掃描的結果進行處理,代碼如下:復制到剪貼板Java代碼1./當一個設備被發現時,需要注冊一個廣播IntentFilterfilter=newIntentFilter(BluetoothDevice.ACTION_FOUND);this.registerReceiver(mReceiver,filter);/當顯示檢查完畢的時候,需要注冊一個廣播filter=newIntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);this.registerReceiver(mReceiver,filter);這里我們注冊到廣播mReceiver的IntentFilter主要包括了發現藍牙設備(BluetoothDevice.ACTION_FOUND)和掃描結束(BluetoothAdapter.ACTION_DISCOVERY_FINISHED),稍后我們分析如何在mReceiver
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國木質建材行業市場調查研究及發展戰略研究報告
- 2025年 貴州公務員考試筆試試題附答案
- 糯米白醋王行業深度研究分析報告(2024-2030版)
- 2025年 東陽市市級機關遴選考試筆試試題附答案
- 中國電阻網絡行業市場深度評估及投資策略咨詢報告
- 農業種植項目可行性報告
- 2025年中國晶振膜厚控制儀行業市場發展前景及發展趨勢與投資戰略研究報告
- 管道燃氣安全評估報告
- 2025年中國丁腈橡膠混煉膠行業市場發展前景及發展趨勢與投資戰略研究報告
- 中國健康服務產業園區市場深度分析及投資戰略咨詢報告
- (高清版)DB11∕T2324-2024腳手架鋼板立網防護應用技術規程
- 2025年山東淄博市臨淄區九合財金控股有限公司招聘筆試參考題庫附帶答案詳解
- 2025事業單位招聘考試綜合應用能力真題庫與參考答案
- 《財務報表分析》課件
- 2025春期國家開放大學《工程地質》階段測驗1-4答案
- 2019草晶華營銷傳播創意方案
- 《醫學檢驗實驗室》課件
- 2025年國藥控股湖南有限公司招聘筆試參考題庫含答案解析
- 產品圖紙知識培訓課件
- 老舊小區改造項目施工組織設計方案
- 上海交通大學《環境儀器分析》2023-2024學年第一學期期末試卷
評論
0/150
提交評論