天天看點

Android開發之藍牙操作

藍牙操作

一、什麼是藍牙

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>

繼續閱讀