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

謝謝。我更新了上面的代碼片段,但列表視圖仍然爲空。還有什麼我該做的? –