0
因此,我有一个片段,它可以发现蓝牙设备并填充ListView
。Android发现片段中的蓝牙设备
这里是我的代码:
public class BluetoothFragment extends Fragment {
private static final String TAG = "BluetoothFragment";
private BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
private Switch m_btSwitch;
private ListView m_btDiscoveredPeerListview;
private ArrayList<String> m_DiscoveredPeers = new ArrayList<>();
private ArrayAdapter m_DiscoveredPeersAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_bluetooth, container, false);
// Init UI elements
m_btSwitch = (Switch) view.findViewById(R.id.bt_switch);
m_btDiscoveredPeerListview = (ListView) view.findViewById(R.id.bt_discovered_peers_listview);
m_DiscoveredPeersAdapter = new ArrayAdapter(getActivity(), R.layout.row_devices, m_DiscoveredPeers);
m_btDiscoveredPeerListview.setAdapter(m_DiscoveredPeersAdapter);
m_btSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
startBluetooth();
} else {
stopBluetooth();
}
...
return view;
}
private void startBluetooth() {
if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, 0);
}
Toast.makeText(getActivity(), "Bluetooth turned on",Toast.LENGTH_LONG).show();
// Check is Discover is already running
if (mBluetoothAdapter.isDiscovering()) {
mBluetoothAdapter.cancelDiscovery();
}
mBluetoothAdapter.startDiscovery();
// Register for broadcasts when a device is discovered.
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
getActivity().registerReceiver(mReceiver, filter);
}
private void stopBluetooth() {
Toast.makeText(getActivity(), "Bluetooth turned off",Toast.LENGTH_LONG).show();
// Turn off BT
mBluetoothAdapter.disable();
}
// Create a BroadcastReceiver for ACTION_FOUND.
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
// Discovery has found a device. Get the BluetoothDevice
// object and its info from the Intent.
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
// Add the device info to the listview
m_DiscoveredPeers.add(device.getName() + "\n" + device.getAddress());
m_btDiscoveredPeerListview.setAdapter(new ArrayAdapter<String>(context,
android.R.layout.simple_list_item_1, m_DiscoveredPeers));
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Respond to the turn-on-Bluetooth activity; if Bluetooth is
// enabled now, start discovery
if (requestCode == 0) {
if (mBluetoothAdapter != null && mBluetoothAdapter.isEnabled()) {
mBluetoothAdapter.startDiscovery();
}
}
// Register for broadcasts when a device is discovered.
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
getActivity().registerReceiver(mReceiver, filter);
}
};
我想发现的设备添加到m_btDiscoveredPeerListview
列表视图和显示器,但现在的APP只需打开BT。
在此先感谢!
**更新**
我更新了斯科特的意见的代码,但它仍然无法填补的ListView。我正在添加logcat来查看它是否有帮助。
D/BluetoothFragment: Button is checked
D/BluetoothFragment: On BT Start
D/BluetoothAdapter: 1095832816: getState() : mService = null. Returning STATE_OFF
D/BluetoothAdapter: 1095832816: getState() : mService = null. Returning STATE_OFF
D/BluetoothFragment: End of BT Start
D/AbsListView: unregisterIRListener() is called
D/AbsListView: unregisterIRListener() is called
D/AbsListView: unregisterIRListener() is called
D/BluetoothAdapter: onBluetoothServiceUp: [email protected]
D/AbsListView: unregisterIRListener() is called
谢谢。我更新了上面的代码片段,但列表视图仍然为空。还有什么我该做的? –