如何在广播接收器中使用配对的蓝牙设备的数据打开应用程序

时间:2019-03-18 11:47:18

标签: android bluetooth

我的应用程序是使用obd扫描仪(提供蓝牙接口)来获取汽车数据。我想在此应用程序中添加一个功能,那就是只要汽车的obd(已配对)在手机的蓝牙范围内,应用程序都应自行打开。

我的实现想法是,如果配对设备中的任何一个包含子字符串obd(小写或大写),则在广播接收器中获取配对设备的列表,然后应用应自行打开。

我所取得的成就:     每当任何包含obd Sub字符串的蓝牙设备与我的手机连接时,我的应用程序便会自行打开。连接过程由我通过设备设置手动完成。

内部广播代码以获取上述结果:

public class BrodcastBlueTooth extends BroadcastReceiver {
    public BrodcastBlueTooth() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {

        String DeviceName=null;
        String action = intent.getAction();
//        Log.d("BroadcastActions", "Action "+action+"received");
        int state;
        BluetoothDevice bluetoothDevice;

        switch(action)
        {

            case BluetoothDevice.ACTION_ACL_CONNECTED:
                bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                Toast.makeText(context, "Connected to "+bluetoothDevice.getName(), Toast.LENGTH_SHORT).show();
                Log.d("BroadcastActions", "Connected to "+bluetoothDevice.getName());

                DeviceName=bluetoothDevice.getName();
                if (DeviceName.contains("OBD")){
                    Intent newIntent = new Intent();
                    newIntent.setClassName("com.quad14.obdnewtry", "com.quad14.obdnewtry.activity.MainActivity");
                    newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
                    context.startActivity(newIntent);


                }else if(DeviceName.contains("obd")){
                    Intent newIntent = new Intent();
                    newIntent.setClassName("com.quad14.obdnewtry", "com.quad14.obdnewtry.activity.MainActivity");
                    newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
                    context.startActivity(newIntent);
                }

                break;

            case BluetoothDevice.ACTION_ACL_DISCONNECTED:
                bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
//                Toast.makeText(context, "Disconnected from "+bluetoothDevice.getName(),
//                        Toast.LENGTH_SHORT).show();
                break;
        }

我在清单中声明广播,因此它始终在后台运行。

我通过以下代码获得了配对的设备列表:

   public void PairedDevice(){
            Set<BluetoothDevice> pairedDevices = BTAdapter.getBondedDevices();
            if (pairedDevices.size() > 0) {
                for (BluetoothDevice device : pairedDevices) {
                    PaiedDevices.add(device.getName());

                    Log.e("DeviceName", String.valueOf(PaiedDevices));
                    PairDeviceFlag=true;
                }
            }
        }  

从这一点上我应该怎么做才能获得理想的结果。任何其他方式也欢迎。

0 个答案:

没有答案