Android 藍芽模組基礎操作

來源:互聯網
上載者:User

標籤:

之前沒怎麼接觸過藍芽模組,在學習的過程中借鑒了很多前輩的經驗。本次主要包含以下功能:

  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>

 

藍芽主要用的兩個類BluetoothAdapterBluetoothDevice,在通訊方面會用到BluetoothServerSocket

目前瞭解的只有這麼多了,還要繼續努力。

備忘:

1、轉載請註明出去

2、代碼雖然是我寫的,但是他自己長歪了,有問題盡量別找我 ~~~~(>_<)~~~~ 。

3、謝謝閱讀

 

Android 藍芽模組基礎操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.