如何检索与Android的蓝牙设备选择器蓝牙设备的信息? [英] How to retrieve Bluetooth device info with Android Bluetooth device picker?

查看:180
本文介绍了如何检索与Android的蓝牙设备选择器蓝牙设备的信息?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是我使用的测试code:

 公共类IOConnectDirect延伸活动{

私有静态最后字符串变量=IOConnectDirect;

私有静态最终诠释REQ code_BLUETOOTH_RESULT = 0;

@覆盖
保护无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    Log.i(TAG的onCreate);
    的setTitle(的getTitle()+ - + TAG);
    意图int​​entBluetooth =新意图();
    intentBluetooth.setAction(android.bluetooth.devicepicker.action.LAUNCH);
    //android.bluetooth.devicepicker.action.DEVICE_SELECTED不工作。
    startActivityForResult(intentBluetooth,REQ code_BLUETOOTH_RESULT);
}


@覆盖
保护无效onActivityResult(INT申请code,INT结果code,意图数据){
    Log.i(TAG,onActivityResult(+请求code +,+结果code +));

    开关(要求code){
    案例REQ code_BLUETOOTH_RESULT:
        Log.i(TAG,请求code = REQ code_BLUETOOTH_RESULT);

        如果(结果code == RESULT_OK){
            Log.i(TAG,RESULT_OK);

            //检索信息
            捆绑额外= data.getExtras();

            如果(临时演员!= NULL){
                Log.i(TAG,捆绑OK);
            }
        }
        其他 {
            Log.i(!RESULT_OK =失败(TAG,+结果code +));
            Toast.makeText(此,失败(+结果code +),Toast.LENGTH_SHORT).show();
        }

        打破;

    默认:
        Log.i(TAG,请求code = ????);
        打破;
    }
}
 

}

下面是logcat的输出:

  I / IOConnectDirect(第14956):onActivityResult(0,0)
I / IOConnectDirect(第14956):请求code = REQ code_BLUETOOTH_RESULT
I / IOConnectDirect(第14956):RESULT_OK =失败(0)
 

在code ++工程(你需要首先激活蓝牙),我只是不能让它做什么,我想这是为了找回我的活动选择的蓝牙设备的名称和地址。

请注意:

  • 在我没有尝试连接我只是想选择的设备信息。
  • 在我所熟悉的其他方法来做到这一点像在Android的蓝牙聊天样品

更新

我最终使用一个BroadcastReceiver

 公共类IOConnectDirect延伸活动{

    私有静态最后字符串变量=IOConnectDirect;


    @覆盖
    保护无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        Log.i(TAG的onCreate);

        BluetoothConnectActivityReceiver mBluetoothPickerReceiver =新BluetoothConnectActivityReceiver();
        registerReceiver(mBluetoothPickerReceiver,新的IntentFilter(BluetoothDevicePicker.ACTION_DEVICE_SELECTED));
        startActivity(新意图(BluetoothDevicePicker.ACTION_LAUNCH)
            .putExtra(BluetoothDevicePicker.EXTRA_NEED_AUTH,FALSE)
        .putExtra(BluetoothDevicePicker.EXTRA_FILTER_TYPE,BluetoothDevicePicker.FILTER_TYPE_ALL)
        .setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS));

    }

    公共类BluetoothConnectActivityReceiver扩展的BroadcastReceiver {


        @覆盖
        公共无效的onReceive(上下文的背景下,意图意图){
            如果(BluetoothDevicePicker.ACTION_DEVICE_SELECTED.equals(intent.getAction())){
                context.unregisterReceiver(本);
                BluetoothDevice类设备=(BluetoothDevice类)intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                Toast.makeText(上下文,设备+ device.getAddress(),Toast.LENGTH_SHORT).show();
            }
        }
    }
 

解决方案

试试这个code:

 私人最终的BroadcastReceiver mBluetoothPickerReceiver =新BluetoothConnectActivityReceiver(本);

 无效connectToService(字符串defaultAdapter){
    如果(defaultAdapter == NULL){
        registerReceiver(mBluetoothPickerReceiver,新的IntentFilter(BluetoothDevicePicker.ACTION_DEVICE_SELECTED));
        startActivity(新意图(BluetoothDevicePicker.ACTION_LAUNCH)
            .putExtra(BluetoothDevicePicker.EXTRA_NEED_AUTH,FALSE)
            .putExtra(BluetoothDevicePicker.EXTRA_FILTER_TYPE,BluetoothDevicePicker.FILTER_TYPE_ALL)
            .setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS));
    } 其他 {
        。mCardroid.getCardroidService()connectTo(defaultAdapter);
    }
}

公共类BluetoothConnectActivityReceiver扩展的BroadcastReceiver {
    私人BluetoothConnectActivity bluetoothConnectActivity;
 公共BluetoothConnectActivityReceiver(BluetoothConnectActivity bluetoothConnectActivity){
            this.bluetoothConnectActivity = bluetoothConnectActivity;
        }

     @覆盖
            公共无效的onReceive(上下文的背景下,意图意图){
                如果(BluetoothDevicePicker.ACTION_DEVICE_SELECTED.equals(intent.getAction())){
                    context.unregisterReceiver(本);
                    BluetoothDevice类设备=(BluetoothDevice类)intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                    bluetoothConnectActivity.connectToService(device.getAddress());
                }
            }
        }
 

完全code基准是:

HTTP: //$c$c.google.com/p/carbot/source/browse/trunk/src/net/cardroid/?r=8

Here is the test code that I am using :

public class IOConnectDirect extends Activity {

private static final String TAG = "IOConnectDirect";

private static final int REQCODE_BLUETOOTH_RESULT = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.i(TAG, "onCreate");
    setTitle(getTitle() + "--" + TAG);
    Intent intentBluetooth = new Intent();
    intentBluetooth.setAction("android.bluetooth.devicepicker.action.LAUNCH");
    //android.bluetooth.devicepicker.action.DEVICE_SELECTED not working .
    startActivityForResult(intentBluetooth, REQCODE_BLUETOOTH_RESULT);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.i(TAG, "onActivityResult(" + requestCode  +"," + resultCode + ")");

    switch (requestCode) {
    case REQCODE_BLUETOOTH_RESULT:
        Log.i(TAG, "requestCode = REQCODE_BLUETOOTH_RESULT");

        if(resultCode == RESULT_OK) {
            Log.i(TAG, "RESULT_OK");

            // Retrieve the Info
            Bundle extras = data.getExtras();

            if(extras != null) {
                Log.i(TAG, "Bundle ok");
            }
        }
        else {
            Log.i(TAG, "!RESULT_OK = FAILED(" + resultCode + ")");
            Toast.makeText(this, "Failed(" + resultCode +")", Toast.LENGTH_SHORT).show();
        }

        break;

    default:
        Log.i(TAG, "requestCode = ????");
        break;
    }
}

}

Here is the Logcat output :

I/IOConnectDirect(14956): onActivityResult(0,0)
I/IOConnectDirect(14956): requestCode = REQCODE_BLUETOOTH_RESULT
I/IOConnectDirect(14956): !RESULT_OK = FAILED(0)

The code works (you need to activate Bluetooth first ) , I am just unable to make it do what I want which is to retrieve the Bluetooth device name and address that I selected from the activity .

Note :

  • I am not trying to connect I just want the select device information .
  • I am familiar with other methods to do this like in the Android Bluetooth Chat Sample

UPDATE

I end up using a BroadcastReceiver

public class IOConnectDirect extends Activity {

    private static final String TAG = "IOConnectDirect";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i(TAG, "onCreate");

        BluetoothConnectActivityReceiver mBluetoothPickerReceiver = new BluetoothConnectActivityReceiver();
        registerReceiver(mBluetoothPickerReceiver, new IntentFilter(BluetoothDevicePicker.ACTION_DEVICE_SELECTED));
        startActivity(new Intent(BluetoothDevicePicker.ACTION_LAUNCH)
            .putExtra(BluetoothDevicePicker.EXTRA_NEED_AUTH, false)
        .putExtra(BluetoothDevicePicker.EXTRA_FILTER_TYPE, BluetoothDevicePicker.FILTER_TYPE_ALL)
        .setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS));

    }

    public class BluetoothConnectActivityReceiver extends BroadcastReceiver {


        @Override
        public void onReceive(Context context, Intent intent)  {
            if(BluetoothDevicePicker.ACTION_DEVICE_SELECTED.equals(intent.getAction())) {
                context.unregisterReceiver(this);
                BluetoothDevice device = (BluetoothDevice) intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                Toast.makeText(context, "device" + device.getAddress(), Toast.LENGTH_SHORT).show();
            }
        }
    }

解决方案

Try this code:

private final BroadcastReceiver mBluetoothPickerReceiver = new BluetoothConnectActivityReceiver(this);

 void connectToService(String defaultAdapter) {
    if (defaultAdapter == null) {
        registerReceiver(mBluetoothPickerReceiver, new IntentFilter(BluetoothDevicePicker.ACTION_DEVICE_SELECTED));
        startActivity(new Intent(BluetoothDevicePicker.ACTION_LAUNCH)
            .putExtra(BluetoothDevicePicker.EXTRA_NEED_AUTH, false)
            .putExtra(BluetoothDevicePicker.EXTRA_FILTER_TYPE, BluetoothDevicePicker.FILTER_TYPE_ALL)
            .setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS));
    } else {
        mCardroid.getCardroidService().connectTo(defaultAdapter);
    }
}

public class BluetoothConnectActivityReceiver extends BroadcastReceiver {
    private BluetoothConnectActivity bluetoothConnectActivity;
 public BluetoothConnectActivityReceiver(BluetoothConnectActivity bluetoothConnectActivity) {
            this.bluetoothConnectActivity = bluetoothConnectActivity;
        }

     @Override
            public void onReceive(Context context, Intent intent)  {
                if(BluetoothDevicePicker.ACTION_DEVICE_SELECTED.equals(intent.getAction())) {
                    context.unregisterReceiver(this);
                    BluetoothDevice device = (BluetoothDevice) intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                    bluetoothConnectActivity.connectToService(device.getAddress());
                }
            }
        }

The reference of complete code is :

http://code.google.com/p/carbot/source/browse/trunk/src/net/cardroid/?r=8

这篇关于如何检索与Android的蓝牙设备选择器蓝牙设备的信息?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆