藍牙操作
一、什麼是藍牙
1、Bluetooth廣泛使用的一種無線通訊協定
2、主要針對短距離通訊(10m)
3、常用于耳機、滑鼠、鍵盤等移動通訊裝置
二、與藍牙相關的API
1、BluetoothAdapter:代表本地藍牙裝置
2、BluetoothDevice:代表遠端藍牙裝置
三、藍牙需要的設定
需要在AndroidManifest中申明藍牙操作的權限
四、掃描已經配對的藍牙裝置
1、擷取BluetoothAdapter對象
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter()
2、判斷目前裝置中是否有藍牙裝置
if(adapter != null){}
3、判斷目前裝置中的藍牙裝置是否已經打開
使用adapter.isEnabled()方法
4、得到所有已經配對的藍牙裝置
Set devices = adapter.getBondedDevices();
五、設定藍牙裝置的可見性
1、建立intent對象:
Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
2、設定可見性的時間,最大300s,超過300s系統會自動設為300s
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
3、啟動Android内置activity,将參數傳入
startActivity(discoverableIntent);
六、掃描周圍可見的藍牙
1、調用startDiscovery()來掃描周圍可見裝置
BluetoothAdapter.getDefaultAdapter().startDiscovery();
2、每次掃描到系統就會發送廣播
A、建立一個過濾器,過濾廣播ACTION_FOUND
IntentFilter intentFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
B、建立一個廣播接收器
BluetoothReceiver bluetoothReceiver = new BluetoothReceiver();
C、 注冊接收器
registerReceiver(bluetoothReceiver, intentFilter);
D、在廣播中取出資料
String action = intent.getAction();
//從intent取出遠端藍牙裝置
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
七、源代碼
MainActivity.java
點選(此處)折疊或打開
package com.example.bluetooth;
import java.util.Iterator;
import java.util.Set;
import android.os.Bundle;
import android.app.Activity;
import android.app.SearchManager.OnCancelListener;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.IntentFilter;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.webkit.WebView.FindListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity
{
private Button findBtn = null;
private Button scanBtn = null;
private Button setBtn = null;
private EditText edit1 = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到按鈕
findBtn = (Button)findViewById(R.id.findBtn);
scanBtn = (Button)findViewById(R.id.scanBtn);
setBtn = (Button)findViewById(R.id.setBtn);
//設定監聽器
findBtn.setOnClickListener(new btnOnclickListener());
scanBtn.setOnClickListener(new btnOnclickListener());
setBtn.setOnClickListener(new btnOnclickListener());
edit1 = (EditText)findViewById(R.id.edit1);
//建立一個過濾器,過濾廣播ACTION_FOUND
IntentFilter intentFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
//建立一個廣播接收器
BluetoothReceiver bluetoothReceiver = new BluetoothReceiver();
//注冊接收器
registerReceiver(bluetoothReceiver, intentFilter);
}
class btnOnclickListener implements android.view.View.OnClickListener
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.findBtn:
//擷取BluetoothAdapter對象
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
//如果得到了裝置
if(adapter != null)
{
//更新edittext,列印有裝置
edit1.append("have!"+'\n');
//如果裝置沒有被打開
if(!adapter.isEnabled())
{
//啟動新的activity,打開藍牙
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivity(intent);
}
//擷取所有已經配對的藍牙,得到一個藍牙裝置集
SetBluetoothDevice> devices = adapter.getBondedDevices();
if(devices.size()>0)
//如果有已經配對的藍牙,那麼用疊代逐個列印出來
for(Iterator iterator=devices.iterator(); iterator.hasNext();)
{
BluetoothDevice bluetoothDevice = (BluetoothDevice)iterator.next();
edit1.append(bluetoothDevice.getAddress()+'\n');
}
}
else
edit1.append("no device!!");
break;
case R.id.scanBtn:
//調用startDiscovery()來掃描周圍可見裝置
BluetoothAdapter.getDefaultAdapter().startDiscovery();
case R.id.setBtn:
//建立intent通過intent傳遞參數
Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
//設定可見狀态的持續時間,如果超過300s,那麼系統會自動設為300s
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
//啟動activity,這是Android自帶的
startActivity(discoverableIntent);
default:
}
}
private class BluetoothReceiver extends BroadcastReceiver
public void onReceive(Context context, Intent intent)
//接受intent
String action = intent.getAction();
//從intent取出遠端藍牙裝置
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
edit1.append("find new device:"+device.getAddress()+"\n");
public boolean onCreateOptionsMenu(Menu menu)
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
布局檔案
RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
Button
android:id="@+id/findBtn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="掃描已經連接配接的藍牙"
/>
android:id="@+id/setBtn"
android:layout_below="@+id/findBtn"
android:text="設定藍牙可見性"
android:id="@+id/scanBtn"
android:layout_below="@+id/setBtn"
android:text="掃描周圍可見的藍牙"
EditText
android:id="@+id/edit1"
android:layout_below="@+id/scanBtn"
/RelativeLayout>