`

一些与蓝牙有关的code

 
阅读更多

注册Recevier

IntentFilter audioStateFilter = new IntentFilter();
audioStateFilter.addAction(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED);
audioStateFilter.addAction(BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED);
mReceiver = new VoiceDialerBroadcastReceiver();
registerReceiver(mReceiver, audioStateFilter);

取消Receiver

unregisterReceiver(mReceiver);

Receiver的实现

 

private class VoiceDialerBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action.equals(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED)) {

            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            int state = intent.getIntExtra(BluetoothProfile.EXTRA_STATE, -1);

            if (false) Log.d(TAG, "HEADSET STATE -> " + state);

            if (state == BluetoothProfile.STATE_CONNECTED) {
                if (device == null) {
                    return;
                }
                mBluetoothDevice = device;
                updateBluetoothParameters(true);
            } else if (state == BluetoothProfile.STATE_DISCONNECTED) {
                mBluetoothDevice = null;
                updateBluetoothParameters(false);
            }
        } else if (action.equals(BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED)) {
            int state = intent.getIntExtra(BluetoothProfile.EXTRA_STATE, -1);
            int prevState = intent.getIntExtra(BluetoothProfile.EXTRA_PREVIOUS_STATE, -1);
            if (state == BluetoothHeadset.STATE_AUDIO_CONNECTED &&
                mWaitingForScoConnection) {
                // SCO channel has just become available.
                mWaitingForScoConnection = false;
                if (mWaitingForTts) {
                    // still waiting for the TTS to be set up.
                } else {
                    // we now have SCO connection and TTS, so we can start.
                    mHandler.postDelayed(new GreetingRunnable(), FIRST_UTTERANCE_DELAY);
                }
            } else if (prevState == BluetoothHeadset.STATE_AUDIO_CONNECTED) {
                if (!mWaitingForScoConnection) {
                    // apparently our connection to the headset has dropped.
                    // we won't be able to continue voicedialing.
                    if (false) Log.d(TAG, "lost sco connection");

                    mHandler.post(new ErrorRunnable(
                            R.string.headset_connection_lost));

                    exitActivity();
                }
            }
        }
    }
}

蓝牙语音识别

mBluetoothHeadset.startVoiceRecognition(mBluetoothDevice);
mBluetoothHeadset.stopVoiceRecognition(mBluetoothDevice);

 

mAdapter = BluetoothAdapter.getDefaultAdapter();
if (BluetoothHeadset.isBluetoothVoiceDialingEnabled(this) && mAdapter != null) {
    if (!mAdapter.getProfileProxy(this, mBluetoothHeadsetServiceListener,
        BluetoothProfile.HEADSET)) {
            Log.e(TAG, "Getting Headset Proxy failed");
    }
}

mAdapter.closeProfileProxy(BluetoothProfile.HEADSET, mBluetoothHeadset);

 

private BluetoothProfile.ServiceListener mBluetoothHeadsetServiceListener =
        new BluetoothProfile.ServiceListener() {
    public void onServiceConnected(int profile, BluetoothProfile proxy) {
        if (false) Log.d(TAG, "onServiceConnected");
        mBluetoothHeadset = (BluetoothHeadset) proxy;

        List<BluetoothDevice> deviceList = mBluetoothHeadset.getConnectedDevices();

        if (deviceList.size() > 0) {
            mBluetoothDevice = deviceList.get(0);
            int state = mBluetoothHeadset.getConnectionState(mBluetoothDevice);
            if (false) Log.d(TAG, "headset status " + state);

            // We are already connnected to a headset
            if (state == BluetoothHeadset.STATE_CONNECTED) {
                updateBluetoothParameters(true);
                return;
            }
        }
        updateBluetoothParameters(false);
    }

    public void onServiceDisconnected(int profile) {
        mBluetoothHeadset = null;
    }
};
 

 

Detect the connection status of a paired Bluetooth headset to the phone. In Android 3.0 (API level 11) "BluetoothHeadset" class has "isAudioConnected()" method.

adapter = BluetoothAdapter.getDefaultAdapter();

adapter.getProfileProxy(context, mProfileListener, BluetoothProfile.HEADSET);

private BluetoothProfile.ServiceListener mProfileListener =
            new BluetoothProfile.ServiceListener() {
        public void onServiceConnected(int profile, BluetoothProfile proxy) {
            if (profile == BluetoothProfile.HEADSET) {
                mBluetoothHeadset = (BluetoothHeadset) proxy;
            }
        }
        public void onServiceDisconnected(int profile) {
            if (profile == BluetoothProfile.HEADSET) {
                mBluetoothHeadset = null;
            }
       }
    };
 

Use mBluetoothHeadset to call the functions on BluetoothHeadset.java

Note: Audio Connection is different from Connection.

BluetoothProfile.ServiceListener b = new BlueToothListener();
            boolean profileProxy = BluetoothAdapter.getDefaultAdapter()
                    .getProfileProxy(Handler.bot, b, BluetoothProfile.HEADSET);


public class BlueToothListener implements ServiceListener {
        public static BluetoothHeadset headset;
        public static BluetoothDevice bluetoothDevice;
    @Override
    public void onServiceDisconnected(int profile) {// dont care
        headset = null;
    }

    @Override
    public void onServiceConnected(int profile,
            BluetoothProfile proxy) {// dont care
        try {
            Debugger.test("BluetoothProfile onServiceConnected "+proxy);
            if (proxy instanceof BluetoothHeadset)
                headset = ((BluetoothHeadset) proxy);
            else// getProfileProxy(Handler.bot, b, BluetoothProfile.HEADSET); 
                return;// ^^ => NEVER

            List<BluetoothDevice> connectedDevices = proxy
                    .getConnectedDevices();
            for (BluetoothDevice device : connectedDevices) {
                Debugger.log("BluetoothDevice found :" + device);
                bluetoothDevice = device;
                int connectionState = headset.getConnectionState(bluetoothDevice);
                Debugger.log("BluetoothHeadset connectionState "+connectionState);//2 == OK
                boolean startVoiceRecognition = headset
                        .startVoiceRecognition(device);
                if (startVoiceRecognition) {
                    Debugger
                            .log("BluetoothHeadset init Listener OK");
                    return;
                }
                else 
                    Notify.popup("Bluetooth headset can't start speech recognition");

            }
        } catch (Exception e) {
            // }
        }
    }
}
 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    蓝牙炖锅CODE--V1.5_蓝牙_

    《蓝牙炖锅CODE--V1.5:基于HC89F0421串口通信蓝牙模块详解》 在现代智能家居领域,蓝牙技术的应用日益广泛,尤其在智能厨房电器方面,蓝牙炖锅CODE--V1.5正是这样一个创新实例。这款设备通过采用HC89F0421串口通信...

    蓝牙.rar_wonderhy8_小程序 蓝牙_小程序蓝牙_蓝牙 小程序_蓝牙小程序

    1. **小程序API接口**:小程序为开发者提供了丰富的API接口,其中包括用于蓝牙操作的相关接口。这些接口允许小程序连接、扫描、管理和传输数据到蓝牙设备。例如,`wx.startBluetoothDevicesDiscovery()`用于启动蓝牙...

    SampleCode_calibration;test_蓝牙_bluetooth_频偏校准.zip

    2. **蓝牙接口**:源码可能与特定的蓝牙库或API接口相关,例如`bluetooth_connection.h`或`ble_manager.java`,用于建立和管理蓝牙连接。 3. **测试用例**:为了验证校准效果,可能有多个测试用例文件,如`test_...

    MIT App Inventor 最简单蓝牙连接.docx

    MIT App Inventor 蓝牙连接教程 MIT App Inventor 是一个基于 Blocks 编程语言的可视化开发平台,能够帮助用户快速开发移动应用程序。下面是使用 MIT App Inventor 实现蓝牙连接的详细教程。 一、硬件准备 在本...

    source_code_release_1.6.rar_mtk_mtk bt 通信_mtk蓝牙_mtk蓝牙通信

    MTK蓝牙通信模块可能包括了驱动程序、API接口、协议栈以及相关的应用程序示例,使得开发者能够轻松地将蓝牙功能集成到他们的MTK平台上。 在MTK蓝牙通信中,几个核心概念包括: 1. **蓝牙协议栈**:这是蓝牙通信的...

    蓝牙常见uuid和gatt状态码

    文件“蓝牙常用服务uuid及返回值”很可能包含了一些预定义服务的UUID以及在与这些服务交互时可能遇到的GATT状态码。这些信息对开发者来说是非常有价值的参考资源,可以用来快速定位问题,优化设备间的通信流程。 ...

    最新DL.CODE配置软件

    DL.CODE是一款由DATALOGIC得利捷公司推出的高效、专业的配置软件,主要用于管理与配置其一系列产品。这款软件的最新版本为1.11.4,通过DL.CODE 1.11.4_Setup.exe安装文件,用户可以轻松地在自己的设备上安装并开始...

    h5+连接蓝牙打印机打印小票

    本主题探讨的是如何利用H5与蓝牙打印机进行交互,实现小票的无线打印功能。这一技术常用于餐饮、零售等需要快速、便捷打印服务的场景。 首先,我们要了解H5是如何连接蓝牙设备的。在H5中,我们通常借助Web ...

    Android蓝牙通信框架BluetoothKit.zip

    BluetoothKit是一款功能强大的Android蓝牙通信框架,支持经典蓝牙和低功耗蓝牙设备混合扫描,提供了一系列简单易用的接口用于低功耗蓝牙设备的连接,数据读写,通知等。 特点 一、支持经典蓝牙和BLE蓝牙...

    蓝牙模块CSR Firmware描述

    CSR 蓝牙模块 Firmware 描述 CSR 蓝牙模块的 Firmware 描述是指蓝牙模块的固件描述,主要是各个模块功能的简单描述。以下是对蓝牙模块 CSR Firmware 的详细介绍。 蓝牙模块 Firmware 的种类可以分为四种:HCI ...

    蓝牙技术词汇表(蓝牙技术中常用词汇)

    4. **Access Code**:每个基带信息包的开头部分,分为CAC(Common Access Code)、DAC(Directed Access Code)和IAC(Individual Access Code)。它们用于同步和识别信息包。 5. **ACK (Acknowledgement)**:确认...

    CC2640R2蓝牙5.0入门教程

    3. **软件开发环境**:设置TI的IAR Embedded Workbench或CCS(Code Composer Studio)集成开发环境,以及蓝牙协议栈(SimpleLink SDK)的安装和配置。 4. **蓝牙配置和编程**:学习如何通过BLE API(Bluetooth Low ...

    python写的无人机蓝牙控制模块code.zip

    这个模块允许用户通过蓝牙设备(如智能手机或游戏手柄)与无人机进行交互,实现起飞、降落、前进、后退、左转、右转等基本飞行操作,甚至可能包含更复杂的动作如翻滚、悬停等。下面将详细讲解这个知识点。 首先,...

    蓝牙4.0 BLE 教程

    在教程的最后部分,可能还会涉及一些实际应用案例,例如如何利用蓝牙4.0 BLE实现智能家居控制、健康监护和运动监测等。案例中可能会展示如何通过编程实现特定功能,以及如何将这些功能集成到实际的硬件设备中。 总...

    JDY-08透传源码.rar_DEMO_JDY蓝牙_ble demo_jdy_蓝牙透传源码

    蓝牙4.0是蓝牙技术的一个重要版本,它引入了BLE标准,极大地降低了功耗,同时保持了与传统蓝牙的兼容性。BLE主要针对那些需要长时间电池寿命且数据传输需求相对较低的设备,如健康监测器、运动追踪器、智能家居设备...

    蓝牙打印和蓝牙连接代码,复杂布局,工厂条码,外卖单条码

    至于文件名为“QR”的条目,这可能是指QR码数据或者与生成和打印QR码相关的代码文件。QR码(Quick Response Code)是一种二维条码,可以存储网址、文本、联系人信息等大量数据。生成QR码的库有很多,如Android的...

    BM83 Example Code V1.0.1_BM83蓝牙模块代码_

    在"BM83 Example Code V1.0.1"中,我们可以找到一系列关于如何与BM83蓝牙模块交互的示例代码。这些代码通常包含了初始化模块、设置连接参数、建立和管理多个连接、收发数据等功能,对于开发者来说是非常宝贵的参考...

    Android蓝牙扫描

    在Android平台上,蓝牙技术是设备间通信的重要方式,特别是在物联网(IoT)设备和移动设备交互的场景中。本文将详细解析如何实现Android蓝牙...通过深入理解这些概念和实践,可以更好地实现Android蓝牙设备的发现与连接。

    android source code Bluetooth

    在Android系统中,蓝牙(Bluetooth)是一个至关重要的无线通信技术,允许设备之间进行数据交换和通信。Android源代码中的蓝牙部分提供了对蓝牙功能的...同时,这对于解决蓝牙相关的bug、调试和性能优化也具有重要价值。

Global site tag (gtag.js) - Google Analytics