6

根据开发人员指南,可以发出启用蓝牙的请求,如下所示:

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
  • 连结 7
  • 连结 4
  • 银河连结
4

2 回答 2

6

在 4.1.1 上进行测试,看起来该指南完全是错误的。调用 startActivityForResult 无法按预期工作,并且在用户有机会与对话框交互之前调用 onActivityResult。

因此,了解用户何时启用蓝牙的可靠方法是监听相关的ACTION_STATE_CHANGED事件。

于 2013-08-08T23:54:16.500 回答
6

startActivityForResult 不适用于 singleInstance。您的活动是否配置为单个实例?(android:launchMode="singleInstance")

于 2014-08-11T12:50:42.920 回答