android蓝牙测试

1.添加权限

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

2.main.xml

<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"
    tools:context="com.example.bluetoothtest.MainActivity" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>

</RelativeLayout>

3.MainActivity.java

package com.example.bluetoothtest;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import android.app.Activity;
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.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {
    private BluetoothAdapter bluetoothAdapter = BluetoothAdapter
            .getDefaultAdapter();
    private List<BluetoothDevice> deviceList = new ArrayList<BluetoothDevice>();
    private int REQUEST_ENABLE_BT = 1;

    private ListView listView;
    private ArrayAdapter<String> adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        listView = (ListView)findViewById(R.id.listView1);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
        listView.setAdapter(adapter);

        if (bluetoothAdapter == null) {
            Toast.makeText(getApplicationContext(), "bluetooth not exist!",
                    Toast.LENGTH_SHORT).show();
            finish();
        } else if (!bluetoothAdapter.isEnabled()) {
            // Show a system activity that allows the user to turn on Bluetooth
            Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(intent, REQUEST_ENABLE_BT);
        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        // 注册接收器
        Intent discoverIntent = new Intent(
                BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
        // 开启搜索看见模式,最长10s
        discoverIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,
                10);
        startActivity(discoverIntent);

        IntentFilter discoverFilter = new IntentFilter(
                BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
        registerReceiver(discover_R, discoverFilter);
        IntentFilter findFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
        registerReceiver(find_R, findFilter);

        bluetoothAdapter.startDiscovery();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (bluetoothAdapter != null) {
            bluetoothAdapter.cancelDiscovery();
            bluetoothAdapter.disable();
        }
    }

    // ACTION_DISCOVERY_FINISHED,搜索结束后追加已配对的设备
    // getName()这一步比较漫长,“已配对”那句话要等好一会儿才出现
    BroadcastReceiver discover_R = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            getName();
            unregisterReceiver(find_R);
            unregisterReceiver(this);
        }
    };

    // ACTION_FOUND,这是搜索到的所有蓝牙(未配对+已配对)
    BroadcastReceiver find_R = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            deviceList.add(device);
            adapter.add(device.getName());
        }
    };

    private void getName() {
        Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
        if(pairedDevices.size() > 0){
            for(BluetoothDevice device : pairedDevices){
                deviceList.add(device);
                adapter.add(device.getName()+"已配对!");
            }
        }
    }
}

注意点:在执行getBondedDevices时候会花费一点时间,一开始我不知道,“已配对”一直没出现,以为出错了。后来上了趟厕所回来发现就有了!!!!尴尬!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 Android Java 蓝牙测试代码,可以用于搜索和连接蓝牙设备: ```java import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; import java.io.IOException; import java.util.ArrayList; import java.util.Set; import java.util.UUID; public class MainActivity extends AppCompatActivity { private BluetoothAdapter bluetoothAdapter; private ListView listView; private ArrayAdapter<String> adapter; private ArrayList<BluetoothDevice> devices; private ConnectThread connectThread; private ConnectedThread connectedThread; private Handler handler; private static final int MESSAGE_READ = 1; private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化蓝牙适配器 bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); // 初始化ListView和Adapter listView = (ListView) findViewById(R.id.listView); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, 0); listView.setAdapter(adapter); // 初始化设备列表 devices = new ArrayList<BluetoothDevice>(); // 初始化Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case MESSAGE_READ: byte[] readBuf = (byte[]) msg.obj; String readMessage = new String(readBuf, 0, msg.arg1); // 处理接收到的数据 break; } } }; // 检查蓝牙是否可用 if (bluetoothAdapter == null) { Toast.makeText(this, "蓝牙不可用", Toast.LENGTH_SHORT).show(); } else { // 检查蓝牙是否已经开启 if (!bluetoothAdapter.isEnabled()) { // 请求开启蓝牙 BluetoothAdapter.enable(); } // 显示已配对设备 Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices(); if (pairedDevices.size() > 0) { for (BluetoothDevice device : pairedDevices) { devices.add(device); adapter.add(device.getName() + "\n" + device.getAddress()); } } } } @Override protected void onDestroy() { super.onDestroy(); // 关闭连接线程和数据传输线程 if (connectThread != null) { connectThread.cancel(); connectThread = null; } if (connectedThread != null) { connectedThread.cancel(); connectedThread = null; } } // 搜索蓝牙设备 private void searchDevices() { // 开始搜索 bluetoothAdapter.startDiscovery(); } // 停止搜索蓝牙设备 private void stopSearch() { // 停止搜索 bluetoothAdapter.cancelDiscovery(); } // 连接蓝牙设备 private void connectDevice(BluetoothDevice device) { // 开始连接 connectThread = new ConnectThread(device); connectThread.start(); } // 发送数据 private void sendData(byte[] data) { // 发送数据 connectedThread.write(data); } // 连接线程 private class ConnectThread extends Thread { private BluetoothSocket socket; private BluetoothDevice device; public ConnectThread(BluetoothDevice device) { this.device = device; try { // 创建一个Socket连接 socket = device.createRfcommSocketToServiceRecord(MY_UUID); } catch (IOException e) { e.printStackTrace(); } } @Override public void run() { // 连接 try { socket.connect(); } catch (IOException e) { e.printStackTrace(); try { // 关闭Socket socket.close(); } catch (IOException e1) { e1.printStackTrace(); } return; } // 连接成功,启动数据传输线程 connectedThread = new ConnectedThread(socket); connectedThread.start(); } public void cancel() { try { // 关闭Socket socket.close(); } catch (IOException e) { e.printStackTrace(); } } } // 数据传输线程 private class ConnectedThread extends Thread { private BluetoothSocket socket; private byte[] buffer; private int bytes; public ConnectedThread(BluetoothSocket socket) { this.socket = socket; buffer = new byte[1024]; } @Override public void run() { // 循环接收数据 while (true) { try { bytes = socket.getInputStream().read(buffer); handler.obtainMessage(MESSAGE_READ, bytes, -1, buffer).sendToTarget(); } catch (IOException e) { e.printStackTrace(); break; } } } public void write(byte[] data) { try { // 发送数据 socket.getOutputStream().write(data); } catch (IOException e) { e.printStackTrace(); } } public void cancel() { try { // 关闭Socket socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } ``` 注意:需要在 AndroidManifest.xml 文件中添加以下权限: ```xml <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值