標籤:
之前沒怎麼接觸過藍芽模組,在學習的過程中借鑒了很多前輩的經驗。本次主要包含以下功能:
1、檢測是否存在藍芽模組
2、藍芽的開啟與關閉
3、與本機已配對的藍牙裝置
4、本機藍芽可見度設定
5、掃描周圍藍牙裝置
關於藍牙裝置之間如何通訊下次再整理。下面開始介紹。
1.1、首先要在設定檔中加入操作藍芽的許可權
<uses-permission android:name="android.permission.BLUETOOTH"/><uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
第一個許可權可以控制藍芽模組的檢測、開啟與關閉。如果需要掃描周圍藍牙裝置等更多功能則需要第二個許可權。
1.2、具體代碼
btn_check.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubBluetoothAdapter bltadapter = BluetoothAdapter.getDefaultAdapter();//本機適配器if(bltadapter == null){Toast.makeText(getApplicationContext(), "本機沒有藍牙裝置", 0).show();tv_result.setText("本機沒有藍牙裝置");}else{Toast.makeText(getApplicationContext(), "本機擁有藍牙裝置", 0).show();tv_result.setText("本機擁有藍牙裝置");if(!bltadapter.isEnabled())//檢測藍芽是否開啟{Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);//開啟藍芽startActivity(intent);}Set <BluetoothDevice> bltDevices = bltadapter.getBondedDevices();String address = "已配對藍牙裝置";if(bltDevices.size()>0){for(Iterator iterator = bltDevices.iterator();iterator.hasNext();)//迭代器收集已適配的藍芽地址並列印{BluetoothDevice bltdevice = (BluetoothDevice)iterator.next();address = address+"\n"+bltdevice.getAddress().toString();}tv_result.setText(address);}}}});
1.3結果
a)初始狀態藍芽未開啟
b)請求開啟藍芽
c)顯示已配對裝置
2.1、設定藍芽可見度,這裡需要說明的是,根據官方介紹
The current default is 120 seconds, and requests over 300 seconds will be capped. These values could change.
即裝置可見時間預設為120s,最大為300s,如果參數大於300則等於300。
代碼如下
btn_discover.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 400);//400即為設定的可見時間超過300則等於300startActivity(intent);}});
2.2、結果如下
3、掃描附近藍芽。藍芽本身採用廣播機制。代碼如下:
IntentFilter intentFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);//過濾器BluetoothReceiver bluetoothReceiver = new BluetoothReceiver();registerReceiver(bluetoothReceiver, intentFilter);//註冊接受者private class BluetoothReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubString action = intent.getAction();if(BluetoothDevice.ACTION_FOUND.equals(action)){BluetoothDevice bltdevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);result1 = result1+"\n"+bltdevice.getAddress().toString();tv_result.setText(result1);}}}btn_scan.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubbltadapter.startDiscovery();}});
3.2、結果如下
4、最後附上更改後的全部代碼,歡迎批評指正。
java代碼
package com.example.bluetooth;import java.util.Iterator;import java.util.Set;import android.support.v7.app.ActionBarActivity;import android.annotation.SuppressLint;import android.bluetooth.BluetoothAdapter;import android.bluetooth.BluetoothDevice;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends ActionBarActivity {TextView tv_result;Button btn_check;Button btn_scan;Button btn_discover;String result1 = "周圍藍牙裝置";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final BluetoothAdapter bltadapter = BluetoothAdapter.getDefaultAdapter();IntentFilter intentFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);BluetoothReceiver bluetoothReceiver = new BluetoothReceiver();registerReceiver(bluetoothReceiver, intentFilter);tv_result = (TextView)findViewById(R.id.CheckResult);btn_check = (Button)findViewById(R.id.CheckBlt);btn_scan = (Button)findViewById(R.id.Scan);btn_discover = (Button)findViewById(R.id.Visable);btn_check.setOnClickListener(new OnClickListener() {@SuppressLint("ShowToast")@Overridepublic void onClick(View v) {// TODO Auto-generated method stubBluetoothAdapter bltadapter = BluetoothAdapter.getDefaultAdapter();if(bltadapter == null){Toast.makeText(getApplicationContext(), "本機沒有藍牙裝置", 0).show();tv_result.setText("本機沒有藍牙裝置");}else{Toast.makeText(getApplicationContext(), "本機擁有藍牙裝置", 0).show();tv_result.setText("本機擁有藍牙裝置");if(!bltadapter.isEnabled()){Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivity(intent);}Set <BluetoothDevice> bltDevices = bltadapter.getBondedDevices();String address = "已配對藍牙裝置";if(bltDevices.size()>0){for(Iterator<BluetoothDevice> iterator = bltDevices.iterator();iterator.hasNext();){BluetoothDevice bltdevice = (BluetoothDevice)iterator.next();address = address+"\n"+bltdevice.getAddress().toString();}tv_result.setText(address);}}}});btn_discover.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 400);startActivity(intent);}});btn_scan.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubbltadapter.startDiscovery();}});}private class BluetoothReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubString action = intent.getAction();if(BluetoothDevice.ACTION_FOUND.equals(action)){BluetoothDevice bltdevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);result1 = result1+"\n"+bltdevice.getAddress().toString();tv_result.setText(result1);}}}}
xml代碼
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/CheckBlt" android:layout_width="fill_parent" android:layout_height="50dp" android:text="檢查本機藍芽" /><Button android:id="@+id/Visable" android:layout_width="fill_parent" android:layout_height="50dp" android:text="設定可見度" /><Button android:id="@+id/Scan" android:layout_width="fill_parent" android:layout_height="50dp" android:text="掃描周圍藍芽" /><TextView android:id="@+id/CheckResult" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /></LinearLayout>
藍芽主要用的兩個類BluetoothAdapter和BluetoothDevice,在通訊方面會用到BluetoothServerSocket。
目前瞭解的只有這麼多了,還要繼續努力。
備忘:
1、轉載請註明出去
2、代碼雖然是我寫的,但是他自己長歪了,有問題盡量別找我 ~~~~(>_<)~~~~ 。
3、謝謝閱讀
Android 藍芽模組基礎操作