【问题标题】:Android - startActivityForResult outside an Activity?Android - 活动之外的 startActivityForResult?
【发布时间】:2011-03-07 10:33:26
【问题描述】:

我有一个在服务中实例化的包装类 (BluetoothDiscoverer)。该类获取一个蓝牙适配器,并在扫描邻近设备之前检查蓝牙是否启用。

现在,如果未启用蓝牙,我希望能够在此类 (BluetoothDiscoverer) 中执行以下操作:

Intent enableBluetoothIntent  = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(enableBluetoothIntent, BLUETOOTH_ENABLER);

现在我读到了:use startActivityForResult from non-activity

但我不想将我的 Main Activity 传递给这个对象,因为我想处理结果(用户是否接受启用蓝牙) 在 BluetoothDiscoverer 类中。

现在如果我让 BluetoothDiscoverer 成为 Activity 的子类

当 startActivityForResult 即将被调用时,我似乎得到了 NullPointerException。

我认为这是因为我需要添加一个 onCreate()/onDestroy() 方法, 但这违背了我正在做的事情的目的,因为我需要能够在实例化此类的服务中调用 BluetoothDiscoverer 对象上的方法。

我还需要注册一个广播接收器,以便在启动扫描时检索相邻设备。如果 BluetoothDiscoverer 类不是 Activity,我该如何注册这个接收器?

有解决办法吗?

谢谢 安德烈亚斯

【问题讨论】:

    标签: android service android-activity bluetooth


    【解决方案1】:

    startActivityForResult() 只能在真实的屏幕活动中使用。请重新设计您的应用程序,以便用户界面由活动驱动,然后让您的服务扫描设备。

    我还需要注册一个广播接收器,以便在启动扫描时检索相邻设备。如果 BluetoothDiscoverer 类不是 Activity,我该如何注册这个接收器?

    你摆脱BluetoothDiscoverer并将其逻辑移动到Service,这是一个Context,因此可以注册接收者。

    【讨论】:

      【解决方案2】:

      在您的Service 中,创建一个Activity,其目的是请求蓝牙可发现性。为此Activity 传递Messenger 和Intent,并让Activity 启动可发现性活动:

      Intent enableBluetoothIntent  = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
      startActivityForResult(enableBluetoothIntent, BLUETOOTH_ENABLER);
      

      然后,在onActivityResult() 内部通过Messenger 将消息发送回您的服务。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-17
        • 1970-01-01
        • 2012-08-08
        • 2022-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多