如何检索与Android的蓝牙设备选择器蓝牙设备的信息? [英] How to retrieve Bluetooth device info with Android Bluetooth device picker?
本文介绍了如何检索与Android的蓝牙设备选择器蓝牙设备的信息?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
下面是我使用的测试code:
公共类IOConnectDirect延伸活动{
私有静态最后字符串变量=IOConnectDirect;
私有静态最终诠释REQ code_BLUETOOTH_RESULT = 0;
@覆盖
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
Log.i(TAG的onCreate);
的setTitle(的getTitle()+ - + TAG);
意图intentBluetooth =新意图();
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屋!
查看全文