Android 在应用程序崩溃或退出时取消绑定(bind)服务

标签 android service bluetooth android-service android-service-binding

我正在开发绑定(bind)到 Android 服务的 Android 应用。

问题是 Android 服务负责与另一台设备的蓝牙连接。

目前,我的服务公开了一个 DisconnectBluetooth() 方法,它将结束蓝牙连接。

我所做的是在我的 onDestroy 方法中调用 DisconnectBluetooth 方法,然后调用 unbindService,所以当应用程序停止时, 蓝牙连接关闭,服务解除绑定(bind)。

问题是,如果我的应用程序崩溃,或者有时当我通过在应用程序选择器中滑动它来强制它退出时,onDestroy 方法不会被调用。然后应用程序将退出,但服务仍然存在,因此蓝牙连接也仍然存在。

我该怎么做才能确保关闭蓝牙连接,并在可能的情况下解除绑定(bind)服务?

@Override
protected void onDestroy() {
      if (_api.isConnect()) { //<-- If bound to service, and everything OK
        _api.DisonnectBluetooth(); //<-- Close BT connection with device
        _api.ReleaseService(); //<-- Unbinds service
      }
    }
    super.onDestroy();
}

最佳答案

我一直认为重写 onUnbind() 方法,只有在 Activity 显式调用 unbindService() 方法时才会被调用。

但是不,即使我的应用程序崩溃或通过滑动最近的应用程序选择器强制退出,它也会被调用。我决定使用 onunbind 而不是 onTaskRemoved

注意:我使用的是 Xamarin,我不能保证它能在 Java Android 上运行

关于Android 在应用程序崩溃或退出时取消绑定(bind)服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38098387/

相关文章:

android - 16 个蓝牙振动器连接到 Android 手机

c# - 与 Mono C# 的蓝牙通信

android - BluetoothChat-to-ELM327 拆分响应消息

android - 无法安装英特尔 HAXM - 无错误消息,无设置屏幕

android - Android构建目标为 “No toolchains found in the NDK toolchains”

android - 无法通过 translate3d 停止转换的 CSS3 转换

android - 在后台上传大文件(应用程序关闭时重新启动服务)

android - ScrollView 中的 TabHost 强制它滚动到底部

angular - 在 Angular 8 中,如何从浏览器控制台访问注入(inject)的服务?

node.js - 将 node.js express 服务器作为服务启动