BluetoothAdapter.ACTION_REQUEST_ENABLE立即调用onActivityResult

时间:2013-08-08 01:45:47

标签: android bluetooth

根据开发者指南,可以请求启用蓝牙:

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

2 个答案:

答案 0 :(得分:5)

4.1.1上的测试看起来像指南是完全错误的。调用startActivityForResult对此intent无法正常工作,并且在用户甚至有机会与对话框进行交互之前调用onActivityResult。

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

答案 1 :(得分:4)

startActivityForResult不适用于singleInstance。您的活动是否配置为单个实例? (机器人:launchMode = “singleInstance”)