Java 从Android蓝牙设备选择器获取蓝牙设备信息

Java 从Android蓝牙设备选择器获取蓝牙设备信息,java,android,bluetooth,Java,Android,Bluetooth,我正在开发一个Android应用程序,其中包括向用户显示附近蓝牙设备的列表,并连接到他们选择的设备。我正在尝试使用系统蓝牙设备选择器,如以下帖子所示: 设备选择器确实显示,但我无法找出代码中选择的设备。onReceive中的祝酒词不显示,这表明没有收到广播 我面临的另一个问题是,如果我尝试在请求权限Result中启动设备选取器活动,则设备选取器根本不会显示,尽管在请求权限对话框中单击了“允许”。里面的吐司也没有展示出来 代码如下: //Code inside Fragment Broadca

我正在开发一个Android应用程序,其中包括向用户显示附近蓝牙设备的列表,并连接到他们选择的设备。我正在尝试使用系统蓝牙设备选择器,如以下帖子所示:

设备选择器确实显示,但我无法找出代码中选择的设备。
onReceive
中的祝酒词不显示,这表明没有收到广播

我面临的另一个问题是,如果我尝试在请求权限Result中启动设备选取器活动,则设备选取器根本不会显示,尽管在请求权限对话框中单击了“允许”。里面的吐司也没有展示出来

代码如下:

//Code inside Fragment
BroadcastReceiver mReceiver;
BluetoothAdapter bluetoothAdapter;
BluetoothSocket bsock;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    myView = inflater.inflate(R.layout.controller_mode_layout,container,false);

     bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
//Get location access permission.
    if (bluetoothAdapter != null) {
        if (bluetoothAdapter.isEnabled()) {
            ActivityCompat.requestPermissions(getActivity(),new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, reqCode);
        }
    }
//Receiver to get the selected device information 
    mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
                context.unregisterReceiver(this);
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            Toast.makeText(context,"Device"+device.getAddress(), Toast.LENGTH_SHORT).show();
            try {
                bsock=device.createRfcommSocketToServiceRecord(UUID.fromString("00002415-0000-1000-8000-00805F9B34FB"));
                bsock.connect();
                //Send and receive data logic follows

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    };
    getActivity().registerReceiver(mReceiver, new IntentFilter("android.bluetooth.devicepicker.action.DEVICE_SELECTED"));

    showDevicePicker();

    return myView;
}



@Override
public void onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults)
{
    Toast.makeText(getActivity(),"Permission result", Toast.LENGTH_SHORT).show();
    if((requestCode == reqCode) && (grantResults[0] == PackageManager.PERMISSION_GRANTED))
    {
        //Not working
       // showDevicePicker();
    }
}

public void showDevicePicker()
{
    //Launch built in bluetooth device picker activity
    startActivity( new Intent("android.bluetooth.devicepicker.action.LAUNCH")
            .putExtra("android.bluetooth.devicepicker.extra.NEED_AUTH", false)
            .putExtra("android.bluetooth.devicepicker.extra.FILTER_TYPE", 0)
            .putExtra("android.bluetooth.devicepicker.extra.LAUNCH_PACKAGE","com.example.ankit2.controllerapp1")
            .putExtra("android.bluetooth.devicepicker.extra.DEVICE_PICKER_LAUNCH_CLASS","com.example.ankit2.controllerapp1.Fragment1")
            .setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS));

}
任何帮助都将不胜感激


注意:我在运行棉花糖的Lenovo K3 Note上测试了代码。

问题出在
设备\u PICKER\u LAUNCH\u类
,该类被指定为
碎片1
。启动类必须是活动,即使广播接收器位于片段内部。在这种情况下,将启动类更改为
ControllerActivity
(其中包含片段
Fragment1
)修复了问题