【问题标题】:BluetoothAdapter.ACTION_REQUEST_ENABLE calls onActivityResult immediatelyBluetoothAdapter.ACTION_REQUEST_ENABLE 立即调用 onActivityResult
【发布时间】:2013-08-08 01:45:47
【问题描述】:

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

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
  • 银河系

【问题讨论】:

    标签: android bluetooth


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-13
        • 1970-01-01
        • 1970-01-01
        • 2015-12-28
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多