2013-08-08 3 views
5

Согласно руководств для разработчиков, запрос может быть сделано, чтобы включить Bluetooth, как например:BluetoothAdapter.ACTION_REQUEST_ENABLE звонки onActivityResult немедленно

http://developer.android.com/guide/topics/connectivity/bluetooth.html#SettingUp

if (!mBluetoothAdapter.isEnabled()) { 
    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); 
} 

В моей реализации это создает запрос должным образом, и пользователь представлен диалог запроса.

Моя проблема заключается в том, что onActivityResult() немедленно вызывается так, что перед тем, как диалог даже появится, у меня есть результат. Возвращаемый requestCode соответствует одному набору (в данном случае 9001) и resultCode всегда 0 (Activity.RESULT_CANCELED).

Я считаю, что это ошибка в 4.3, к сожалению, у меня всего 4,3 устройства. Читая описания и источник, кажется, что onActivityResult() не следует вызывать до тех пор, пока пользователь не взаимодействует с диалогом, поэтому кто-нибудь может подтвердить, что это ошибка или объяснить, что я делаю неправильно?

Проверено на следующих с тем же результатом:

  • Новый Nexus 7
  • Nexus 7
  • Nexus 4
  • Galaxy Nexus

ответ

3

startActivityForResult не работает с singleInstance. Является ли ваша активность настроенной как единый экземпляр? (андроид: launchMode = "singleInstance")

4

Тестирование на 4.1.1 это выглядит как руководство просто неправильно. Вызов startActivityForResult не работает должным образом для этого намерения, а onActivityResult вызывается до того, как пользователю будет предоставлена ​​возможность взаимодействовать с диалогом.

Таким образом, надежный способ узнать, когда пользователь включил bluetooth, - это прослушивание связанного с ним события ACTION_STATE_CHANGED.

Смежные вопросы