0

因此,我有一个片段,它可以发现蓝牙设备并填充ListViewAndroid发现片段中的蓝牙设备

这里是我的代码:

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 

回答

0

声明设备信息的ArrayList和ArrayAdapter作为模块变量。后声明m_btSwitch,添加以下代码:

ArrayList<String> m_deviceList; 
ArrayAdapter m_deviceListAdapter; 

初始化这两个模块的变量和适配器连接到内部onCreateView(列表视图),之后你findViewById电话:的

m_deviceList = new ArrayList<>(); 
m_deviceListAdapter = new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1, list); 
m_btDiscoveredPeerListview.setAdapter(adapter); 

更新部分的onCheckedChanged()方法如果启用蓝牙有点开始发现:

@Override 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    if (isChecked) { 
     if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) { 
      Intent turnOn = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
      startActivityForResult(turnOn, 0); 
     } 
     Toast.makeText(getActivity(), "Bluetooth turned on",Toast.LENGTH_LONG).show(); 
     mBluetoothAdapter.startDiscovery(); 
     // Register for broadcasts when a device is discovered. 
     IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
     getActivity().registerReceiver(mReceiver, filter); 
    } 
} 

然后更新您的广播接收器的代码如下所示:

// 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_deviceList.add(device.getName() + device.getAddress()); 
      m_deviceListAdapter.notifyDataSetChanged(); 
     } 
    } 
}; 

最后,你需要一些代码添加到您的片段的onActivityResult方法:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent 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(); 
     } 
    } 

} 
+0

谢谢。我更新了上面的代码片段,但列表视图仍然为空。还有什么我该做的? –