问题标签 [foreground-service]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1329 浏览

android - Android InstantApp:前台服务

无法在 InstantApp 功能模块中使用前台服务。低于运行时安全异常。

java.lang.RuntimeException:无法启动活动 ComponentInfo{ .XYZActivity}:java.lang.SecurityException:方法类 android.app.ActivityManagerProxy.getServices 不适用于即时应用

Android文件说,

受限功能:在用户不知情的情况下在设备上运行。前台服务可用。即时应用程序只能通过支持应用程序链接的活动启动,因此服务、内容提供者或广播接收器将无法启动您的应用程序。

代码:

0 投票
0 回答
535 浏览

android - 如何在设备空闲时使用 Android O 发送位置更新?

在我的代码示例中,当 Android O 设备进入空闲(打盹)模式时,不会在 Android O 设备上发送位置更新。有没有人让这个工作?在 Android O 之前的任何设备上都没有问题(在 API 26 添加位置更新限制之前)

有问题的代码在这里: https ://github.com/jcraw/api_26_location_updates_idle

MainActivity 绑定到前台服务,该服务将位置更新放入 logcat。

代码测试如下:

  1. 创建虚拟设备 (Pixel API 26)
  2. 在虚拟设备的“扩展控件”中,加载并启动 GPX 文件
  3. 使用虚拟设备上的电源按钮禁用屏幕
  4. adb shell dumpsys 电池拔掉
  5. adb shell dumpsys deviceidle 步骤
  6. 重复步骤 5,直到设备处于 IDLE 状态
0 投票
1 回答
1872 浏览

android - Android打盹模式和前台服务

我在这里阅读了许多关于打盹模式的问题,例如Android 打盹模式Android N 打盹模式 - 如何保持后台下载和处理?,唤醒锁和打盹模式和许多其他人。但在许多回复中,意见不同。我自己无法测试(模拟器不支持我的处理器,我唯一的测试设备是android 5.1)。我想知道接下来的情况。我有一个活动,它控制媒体播放器。在具有 android 6.0 及更高版本的设备上,由于打盹模式,它无法按预期工作。正如许多解决方案所说,为了防止打盹模式,它应该在前台的单独进程中启动服务并从那里控制媒体播放器。问题是:如果我在单独的进程中使用部分唤醒锁定启动前台服务,除了显示通知之外什么都不做,并且在我的活动中将控件留给媒体播放器,它是否应该防止打盹模式?或者除了从窗口管理器保持屏幕打开之外,还有其他方法吗?

0 投票
1 回答
1447 浏览

android - 前台服务运行时设备是否进入打盹模式

我的应用程序需要长时间在后台运行并定期向服务器发送数据。我试过 AlarmManager 但它在打盹模式下受到限制。我接下来想到的是前台服务。

前台服务运行时设备是否进入打盹模式?

如果设备进入打盹模式,在前台服务运行时互联网连接是否受到限制?

0 投票
3 回答
111 浏览

android - Android - 从在单独进程中运行的服务中读取首选项

我正在使用PreferenceManager.getDefaultSharedPreferences(Context context)活动(默认进程)为默认共享首选项写入一些值。

我还有一个在单独的进程Foreground Service中运行,使用.android:process=":processName"

现在的问题是,当我尝试从中读取首选项值时Foreground Service,无法读取从Activity.

但是,当我android:process=":processName"从 Android Manifest 中的注册元素中删除该属性时Foreground Service,它开始工作,服务能够从首选项中读取从Activity.

0 投票
0 回答
235 浏览

android - 应用退出时将后台服务切换到前台

  • 在我的应用程序中,我每 30 秒启动一次执行 api cal 的后台服务。我从 START_STICKY 开始。当android停止服务时,有时它不会重新启动。

所以我想通过在用户关闭应用程序时显示通知来运行前台服务。如果我重新打开应用程序,我必须停止前台服务并启动后台服务。

如何实施?任何帮助 *

0 投票
0 回答
401 浏览

android - System Clean Master 杀死了我的前台服务

我正在运行一个在前台的服务并且有一个持续的通知。

我的一位用户告诉我,我的应用程序被 Clean Master 杀死(它已集成到他的 android 系统中,它不是用户应用程序)。如果此应用程序释放 RAM,它会终止我的服务,并且即使它正在使用START_STICKY并且正在使用startForeground以持续通知在前台运行,它也不会重新启动。

我认为这仅适用于系统应用程序,因为据我所知,前台服务不能被用户应用程序杀死。

对此我能做些什么吗?我希望我的服务在被杀死时自行重启,就像它在任何其他情况下一样......

我的服务如下所示:

0 投票
1 回答
6091 浏览

android - 是否可以在具有 IMPORTANCE_MIN 的通知通道中放置前台服务通知?

我目前正在将应用程序转换为 Android O,并且我目前正在处理通知渠道。

我制作了具有不同重要性级别的不同通道,并且由于应用程序有一个前台服务必须一直运行,直到我们过渡到新架构(更面向推送),我考虑将通知放在一个具有其重要性的通道中设置为IMPORTANCE_MIN, 这样它就在那里,但它不会打扰用户,也不会在状态栏中放置图标。

但是,当我这样做时,我将我的应用程序置于后台(使用 Home 或 Back 按钮),我会收到一条 Android 系统通知,告诉我我的应用程序正在后台运行,如下所示:

在后台运行的服务的 Android 系统通知

如果我更改频道并使用它IMPORTANCE_LOW,问题就会消失,但是通知会更加突出。

所以,我的问题是 - 有可能做我正在尝试的事情吗?我知道系统不允许开发人员这样做,因为如果您有前台服务,它应该对用户可见,但这只是一个猜测,我没有找到有关此的文档,这就是为什么我发布这个问题。

我的第二个问题是 - 在 O 之前,如果您将通知的优先级设置为 ,您PRIORITY_MIN可以将该通知绑定到服务以使其成为前台服务,还是从一开始就禁止?

编辑:确认Android系统显示重要频道的通知IMPORTANCE_MIN(感谢M66B),所以现在剩下的问题是为什么?有谁知道这背后的原因,或者可以在任何地方找到任何文档?这可能是一个应该报告给跟踪器的错误吗?

0 投票
0 回答
213 浏览

android - Android会在启动后立即终止后台服务吗?

我有一个连接到蓝牙外围设备的 Android 服务。

我不希望 Android 自行决定终止我的服务,因为这会破坏应用程序的目的。

但是,该应用程序有时会尝试启动服务并在它只是怀疑BT 设备可能在范围内时进行连接——这可能成功也可能失败。除非连接成功,否则我不想在服务变为前台服务时显示通知来打扰用户。(用户可以启用或禁用此功能,因此它不是在用户背后做事。)

因此,我考虑将呼叫延迟到startForeground()蓝牙连接完成。散文中的简要描述(因为代码会很长):

  • MyService#onStartCommand()创建一个 AsyncTask 并启动它(它将在后台线程中运行,以使冗长的蓝牙连接设置远离 UI 线程)。
  • AsyncTask#run()设置蓝牙连接。
  • AsyncTask#onPostExecute()(完成后在 UI 线程上运行run())验证我们是否已连接,如果是,则调用startForeground()创建通知。

但是,在onStartCommand()返回后,服务仍然是后台服务的一小段时间。

Android 是否有在短时间内杀死我的服务以回收内存的风险(当它单独留下前台服务时)?

如果是这样,Android 是否会考虑自服务启动以来经过的时间(首先杀死运行时间最长的服务)?

0 投票
3 回答
24510 浏览

android - Oreo - 前台服务不显示前台通知

到目前为止,我已经调整了我的代码以用于ContextCompat.startForegroundService(context, intentService);启动我的服务。这样,它也适用于 android < 26 和 android 26 (Oreo)。

我仍然看到了差异,在 android oreo 中我没有看到我的自定义前台通知(我只看到“应用程序正在后台运行”通知)。我还需要在那里调整什么吗?

我的服务如下所示:

官方示例

这个例子(https://github.com/googlesamples/android-play-location/blob/master/LocationUpdatesForegroundService/app/src/main/java/com/google/android/gms/location/sample/locationupdatesforegroundservice/LocationUpdatesService.java #L200)显示为评论,我应该使用以下内容,但startServiceInForeground不存在...

编辑

我的通知是这样创建的,到目前为止,它正在数千个 API < 26 的 android 设备上运行: