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
謝謝。我更新了上面的代碼片段,但列表視圖仍然爲空。還有什麼我該做的? –