Android 蓝牙编程学习一基本操作

来源:互联网 发布:淘宝质量问题退货认定 编辑:程序博客网 时间:2024/05/18 17:23

Android 蓝牙编程 其实很简单


与蓝牙相关的API

1。BluetoothAdapter

该类的对象代表了本地蓝牙适配器;
比如程序运行在我的手机上,那么我的手机的蓝牙就用它来代表
也就是主机

2.BluetoothDevice:

代表了一个远程的Bluetooth;
也就是从机;


3.BluetoothServerSocket:


这个类就好比 java中的 serversocket

 

4.BluetoothSocket:

这个类就好比 java中的 socket



第一步 获得 本地蓝牙的 适配器

要想对蓝牙操作 一般还需要在manifest中添加权限


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

上面这句是对蓝牙操作所必须声明的权限

下面这句是在你对蓝牙进行一些设置的时候需要的权限,比如说开启蓝牙,设置可见时间等等。。。

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

首先获得本地适配器

BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();

之后判断 设备是否有蓝牙

通过 判断  adapter 是否为 null

接着再通过 adapter.isEnable()判断蓝牙是否已经开启,如果没有

使用一下系统的Intent的将其开启

Intent intent = new Intent(
                        BluetoothAdapter.ACTION_REQUEST_ENABLE);
                startActivity(intent);


一般将这个 放在onResume中操作,这样 开启之后,就会回到onResume中,执行你判断开启之后的操作


下面 可以在判断开启之中进行操作,比如说获取已配对设备列表,

Set<BluetoothDevice> devices = adapter.getBondedDevices();

之后 通过 迭代 获得每一个 设备device

然后 对 这个 device 进行相应的操作

比如说

String address = device.getAddress();

//getName()  获得设备名称

//device.getBondState();获得绑定状态,  比如说 返回数字12的话 就是已经绑定

如果需要 设置设备可以被发现

Intent intent = new Intent(
                    BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
            // Android 默认最多只能保持300秒的可见性,改为500也只会为300s,这个可以在 启动这个 intent的时候

   //Android会跳出一个对话框,上面只会显示 300s

            intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 500);
            startActivity(intent);





之后 如果需要 扫描设备的话

就是用 adapter.startDiscovery();

这个调用之后 ,系统将会广播其状态和其扫描的设备列表,而且每找到一个就返回一个 ,他是异步工作的。

所以这里 我们需要注册广播来接收。

首先 就需要实例化一个过滤器,而这个过滤器就是过滤广播 信息  BluetoothDevice.ACTION_FOUND ,该信息表明Android 发现设备的消息的

IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);

然后我们使用 registerReceiver(receiver, filter);注册广播接收器

其中receiver为我们 新建一个 内部类 Receiver extends BroadcastReceiver{}的实例


然后我们就可以在 Receiver()里获取发送这个 广播的intent,然后获取该设备bluedevice


public void onReceive(Context context, Intent intent) {

            String action = intent.getAction();

            if (action.equals(BluetoothDevice.ACTION_FOUND)) {

                BluetoothDevice device = intent
                        .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                String address = device.getAddress();
                int device_state = device.getBondState();
                String device_name = device.getName();
                Log.d("my", "--地址" + address + "--是否绑定? " + device_state
                        + " --设备名称" + device_name);
                tvShow.setText(address + device_state + device_name);
                device_mac = address;

            }

以上就是扫描设备,API中说 adapter.startDiscovery();这个会扫描12秒,那么我们其实可以检测一下是不是

通过 在 filter上添加两个动作 搜索设备开始,和探索设备结束

filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);

        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
之后在仍然在 Receiver中如上 一样 判断 Action ,之后打印时间。


if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_STARTED)) {


                Log.d("my", "扫面开始时间" + System.currentTimeMillis());

            }

            if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)) {

                Log.d("my", "扫描结束时间" + System.currentTimeMillis());

            }

可以看出差不多是12秒


时间不早了 哥得去吃饭了。

下次再说 Android 蓝牙的 发送数据 和接收 数据。


原创粉丝点击