我正在尝试创建一个能够检测附近可发现蓝牙设备的应用,并将所有mac地址都放入列表中。由于我不明白的原因,如果我尝试使用列表来存储来自device.getAddress()的字符串,则应用程序崩溃。
在将这些地址放入List之后,我放弃并使用了一个ArrayAdapter,看到它在一些示例代码中使用过。我的想法也许是我可以将结果放入ArrayAdapter,然后从中提取地址,并进入myList。仍然行不通。据我所知,如果没有我的应用程序崩溃,我就无法使用列表...
当我注释掉与myList有关的任何事情时,应用程序不会崩溃。
/* these are declared as class members */
//private ArrayAdapter<String> myArrayAdapter;
//private List<String> myList;
/*-------------------------------*/
private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
int position = 0;
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
myArrayAdapter.add(device.getAddress());
//myList.add(device.getAddress());
//position++; //SO USING THIS INTEGER...
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
btnLocate.setText("Refresh Location");
btnLocate.setClickable(true);
//position--;
//while(position>=0){
//myList.add(myArrayAdapater.getItem(position).toString());
//position--;
//}
}
}
};
logcat的:
12-02 12:01:54.472: E/AndroidRuntime(16043): FATAL EXCEPTION: main
12-02 12:01:54.472: E/AndroidRuntime(16043): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.bluetooth.device.action.FOUND (has extras) } in com.ronnyszutu.lpf.LPFMainActivity$1@40519840
12-02 12:01:54.472: E/AndroidRuntime(16043): at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:722)
12-02 12:01:54.472: E/AndroidRuntime(16043): at android.os.Handler.handleCallback(Handler.java:587)
答案 0 :(得分:0)
在尝试将设备地址添加到其中之前,您是否初始化了列表?此外,您可能希望了解Receiver生命周期,因为开发人员文档讨论了对象有效的时间。 BroadcastReceiver#ReceiverLifecycle