从 Activity 的 onCreate 检测服务可用性

发布于 2024-11-01 19:38:44 字数 396 浏览 1 评论 0原文

Activity 内的 onCreate 中,我希望能够检测不同应用程序中的 Service 是否(我正在还写)可用并正在运行。 AIDL 的问题是没有同步选项。我希望我的活动能够真正等待,看看 Service 是否可用,如果不可用,则采取相应的行动。

我想出的最佳答案是让服务打开 TCP 套接字并让 Activity 尝试连接到它。如果成功,则 Activity 的 onCreate 将知道该服务可用。然而,这充其量只是一个拼凑。

因此,底线是:我的 Activity 的 onCreate 同步检查外部 Service 是否可用,并在从 onCreate 例程返回之前采取操作?

From within the onCreate within an Activity, I'd like to be able to detect whether a Service in a different application (that I'm also writing) is available and running. The problem with AIDL is that there is no synchronous option. I'd like my activity to actually wait to see if the Service is available and act accordingly if it is not.

The best answer I've come up with is for the service to open a TCP socket and for the Activity to try to connect to it. If that succeeds, then the Activity's onCreate will know that the service is available. However this is a kludge at best.

So, bottom line: how can my Activity's onCreate synchronously check to see if an external Service is available and take action before returning from the onCreate routine?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一个人练习一个人 2024-11-08 19:38:44

您可以循环访问 public List返回的列表getRunningServices(int maxNum)。每个 ActivityManager.RunningServiceInfo 包含您需要的信息

检查 API 此处此处

ActivityMAnager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
ArrayList<ActivityManager.RunningServiceInfo> rsiList = am.getRunningServices (999);
boolean found = null;
for (ActivityManager.RunningServiceInfo rsi: rsiList) {
    if (rsi.service.getPackageName().equals("MYPACKAGE") {
       found = true;
       break;
    }
}
if (found) {
    // do whatever
} else {
    // alternative
}

You can loop through the List returned by public List<ActivityManager.RunningServiceInfo> getRunningServices (int maxNum). Each ActivityManager.RunningServiceInfo contains the information you need

Check the API here and here

ActivityMAnager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
ArrayList<ActivityManager.RunningServiceInfo> rsiList = am.getRunningServices (999);
boolean found = null;
for (ActivityManager.RunningServiceInfo rsi: rsiList) {
    if (rsi.service.getPackageName().equals("MYPACKAGE") {
       found = true;
       break;
    }
}
if (found) {
    // do whatever
} else {
    // alternative
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文