以下是我正在使用的测试代码:
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;
}
}
}
这是Logcat输出:
I/IOConnectDirect(14956): onActivityResult(0,0)
I/IOConnectDirect(14956): requestCode = REQCODE_BLUETOOTH_RESULT
I/IOConnectDirect(14956): !RESULT_OK = FAILED(0)
代码有效(你需要先激活蓝牙),我无法让它做我想做的事情,即检索我从活动中选择的蓝牙设备名称和地址。
注意:
更新
我最终使用的是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();
}
}
}
答案 0 :(得分:0)
试试这段代码:
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());
}
}
}
完整代码的参考是:
http://code.google.com/p/carbot/source/browse/trunk/src/net/cardroid/?r=8
答案 1 :(得分:0)
Try this code:
private ArrayAdapter<String> bondedAdapter = null,newScanedAdapter = null;
listViewPairedDevices.setAdapter(bondedAdapter);//oncreate
listViewScanedDevices.setAdapter(newScanedAdapter);//oncreate
public void doDiscovery(){
setProgressBarIndeterminateVisibility(true);
setTitle("Scanning..");
textViewScanedDevices.setVisibility(View.VISIBLE);
if(!BluetoothDemoActivity.bluetoothAdapter.isDiscovering()){
BluetoothDemoActivity.bluetoothAdapter.cancelDiscovery();
}
BluetoothDemoActivity.bluetoothAdapter.startDiscovery();
}//doDiscovery() ends
IntentFilter intentFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
this.registerReceiver(myBroadcastReceiver, intentFilter);
intentFilter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
this.registerReceiver(myBroadcastReceiver, intentFilter);
Set<BluetoothDevice> bondedSet = BluetoothDemoActivity.bluetoothAdapter.getBondedDevices();
Log.v(BluetoothDemoActivity.LOG, "BluetoothDemo : bondedSet: "+bondedSet);
int count = 0;
if(bondedSet.size() > 0){
for(BluetoothDevice device : bondedSet){
textViewPairedDevice.setVisibility(View.VISIBLE);
bondedAdapter.add(device.getName()+"\n"+device.getAddress());
Log.v(BluetoothDemoActivity.LOG, " count = "+count++);
}
}else{
bondedAdapter.add("No Devices");
}
private BroadcastReceiver myBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String action = intent.getAction();
if(BluetoothDevice.ACTION_FOUND.equals(action)){
buttonScanScanDevices.setVisibility(View.GONE);
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if(device.getBondState()!= BluetoothDevice.BOND_BONDED){
newScanedAdapter.add(device.getName()+"\n"+device.getAddress());
}
}else if(BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)){
setProgressBarIndeterminateVisibility(false);
setTitle("Select Device");
if(newScanedAdapter.getCount() == 0){
newScanedAdapter.add("no new device");
}
}else if(intent.getAction().equals("android.bluetooth.device.action.PAIRING_REQUEST")){
System.out.println("Pairing request came");
pair();
}
}
};//BroadcastReceiverends