我有一个应用程序,它在按钮(切换按钮)上按下扫描并在自定义列表视图中显示发现的蓝牙设备,然后再次按下相同的按钮,扫描停止。
现在,当我再次按下按钮(第二次)开始扫描时,问题出现了,同一设备显示了两次。在我停止并开始扫描(第三次)后,同一设备显示三次。并且发现的设备从未与我的安卓手机配对。
有一个类似的问题,但答案对我没有帮助。请让我知道我哪里出错了。
下面是代码
btOnOff.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(btOnOff.isChecked()){
btAdapter.startDiscovery();
setProgressBarIndeterminateVisibility(true);
bcReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String action = intent.getAction();
if(BluetoothDevice.ACTION_FOUND.equals(action)){
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
deviceName = device.getName();
currentDateTime = DateFormat.getDateTimeInstance().format(new Date());
Custom data = new Custom(deviceName, currentDateTime);
fetch.add(data);
lv.setAdapter(cAdapter);
}else if(btAdapter.ACTION_DISCOVERY_FINISHED.equals(action)){
btAdapter.startDiscovery();
}
}
};
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(bcReceiver, filter);
} else {
btAdapter.cancelDiscovery();
}
}
});
我还有两个自定义列表视图的类,是否有什么可以避免重复条目。下面是第一类文件的代码
public class CustomAdapter extends ArrayAdapter<Custom>{
private ArrayList<Custom> entries;
private Activity activity;
public CustomAdapter(Activity a, int textViewResourceId, ArrayList<Custom> entries) {
super(a, textViewResourceId, entries);
// TODO Auto-generated constructor stub
this.entries = entries;
this.activity = a;
}
public static class ViewHolder{
public TextView tv1;
public TextView tv2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
View v = convertView;
ViewHolder holder;
if(v == null){
LayoutInflater vi = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.show_devices, null);
holder = new ViewHolder();
holder.tv1 = (TextView) v.findViewById(R.id.tv1);
holder.tv2 = (TextView) v.findViewById(R.id.tv2);
v.setTag(holder);
}else{
holder = (ViewHolder)v.getTag();
}
final Custom custom = entries.get(position);
if(custom != null){
holder.tv1.setText(custom.getFirst());
holder.tv2.setText(custom.getSecond());
}
return v;
}
}
第二类文件
public class Custom {
private String text1;
private String text2;
public Custom(String string1, String string2){
this.text1 = string1;
this.text2 = string2;
}
public String getFirst(){
return text1;
}
public void setFirst(String text1){
this.text1 = text1;
}
public String getSecond(){
return text2;
}
public void setSecond(String text2){
this.text2 = text2;
}
}