2013-02-27 5 views
2

Я пытаюсь получить список отключенных устройств Bluetooth в android. Я могу получить устройства и использовать ArrayAdapter, заполнить ListView устройств. Мой вопрос: как мне сохранить их в списке, чтобы я мог использовать эту информацию для другой функции? Я пробовал посмотреть на сайт разработчиков Android, и все, что у него есть, - это учебник для ListView. Я также искал другие уроки или объяснения и, кажется, получал неправильную информацию.Как сохранить список обнаружаемых устройств Bluetooth в Android?

Мой код:

protected List<String> doInBackground(Void... arg0) { 
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
mBluetoothAdapter.startDiscovery(); 

// Create a BroadcastReceiver for ACTION_FOUND 
final List<String> discoverableDevicesList = new ArrayList<String>(); 

final BroadcastReceiver mReceiver = new BroadcastReceiver() { 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     // When discovery finds a device 
     if (BluetoothDevice.ACTION_FOUND.equals(action)) { 
      // Get the BluetoothDevice object from the Intent 
      BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
      short rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE); 
      // Add the name and address to an array adapter to show in a ListView 
      System.out.println(device.getName()); 
      discoverableDevicesList.add(device.getName() + "\n" + device.getAddress() + "\n" + rssi); 
     } 
    } 
}; 
// Register the BroadcastReceiver 
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
context.registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy 

return discoverableDevicesList; 

}

Это, вероятно, что-то делать со временем обнаружить, связанные со сканированием для устройств Bluetooth, но я подумал, как было обнаружено, каждый из которых я мог бы просто добавить его в список? Кто-нибудь сталкивался с чем-то похожим или имел возможное решение? Очень ценим!

+0

Вы пробовали экономии в настройках? http://stackoverflow.com/questions/3876680/is-it-possible-to-add-an-array-or-object-to-sharedpreferences-on-android – Jack

ответ

1

Похоже, что это может иметь какое-то отношение к потоку пользовательского интерфейса. Вы пытались отключить AsyncTask, чтобы заполнить ListView при обнаружении устройства Bluetooth? Я вижу, вы:

  // Add the name and address to an array adapter to show in a ListView 
     System.out.println(device.getName()); 
     discoverableDevicesList.add(device.getName() + "\n" + device.getAddress() + "\n" + rssi); 

Внутри приемника, но нет никакой гарантии, что поток пользовательского интерфейса даже готов для обработки ответа.

Я получаю это прочь http://android-developers.blogspot.com/2009/05/painless-threading.html

+0

Я нашел одно, что помогло, немного от но я реализовал это как задачу Async, и я столкнулся с этим сообщением, http://stackoverflow.com/questions/11210420/bluetooth-discovery-inside-a-asynctask @Dewayne, влияет ли это на то, что вы предлагаешь? –

+0

Да, было бы трудно сказать, что именно происходило только с фрагментом, который вы дали, а другой плакат ответил на него правильно. –