Android 应用程序,仅服务

标签 android service

我正在设计一个基本上只是一项服务的应用。

它没有 MainActivity...只有一个 BroadcastReceiver 和一个服务。每次我构建和安装时,什么都没有发生。广播接收器检测手机是否连接到 WiFi 网络。如果 WiFi 未连接,它将 stopService(),否则它 startService()。

该服务将检查 Pebble 应用消息并在收到消息时执行某些命令。问题是,如果没有 MainActivity,我将无法启动该服务。

会不会是因为我没有MainActivity

最佳答案

简单的后台应用程序在 Android 3.0 版本后停止工作。

从 Android 3.1 开始,系统的包管理器会跟踪处于停止状态的应用程序,并提供一种控制它们从后台进程和其他应用程序启动的方法。

系统将 FLAG_EXCLUDE_STOPPED_PACKAGES 添加到所有广播 Intent 。它这样做是为了防止来自后台服务的广播无意中或不必要地启动已停止的应用程序的组件。更多信息 Launch controls on stopped applications .

正如您所提到的,您只有一个 BroadcastReceiver 和一个 Service 而没有 Activity 所以问题可能出在您的 BroadcastReceiver 可能永远不会启动,因为 FLAG_EXCLUDE_STOPPED_PACKAGES 标志。

要接收广播,您的应用程序进程应处于 Activity 状态。 Android 操作系统不允许 BroadcastReceiver 在应用进程不活动时接收一些广播。

如果您有一个正在运行的 Activity ,那么您的进程是 Activity 的,因此您的接收器可以接收广播。

你可以做的是在没有任何 UI 的情况下制作一个透明的 Activity

<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />

并使用startService()在后台启动服务,然后调用Activityfinish()。当您的服务正在运行时,你的进程是活的,所以 Android 操作系统会让你接收广播。

关于Android 应用程序,仅服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22652350/

相关文章:

android - 共享元素更新图片来源

asp.net-core - Visual Studio MSI 安装程序 : Asp.net Core as a Window Service

javascript - AngularJS - 共享服务对象被错误删除

android - 0 个进程和 1 个服务

android - QT 应用程序作为 Android 上的系统应用程序

java - 尝试将按钮放置在 ListView 下方

android - 如何使用共享首选项将多个图像保存到 ImageView

android - 如何在 NFC 中获取 Android 手机 UID

java - Tomcat作为Windows服务如何传递Java属性

java - ANDROID:MediaPlayer 显示错误 (1, -19)