Android O:Service.stopForeground等价方法

9

我目前正在尝试制作一种音乐播放器应用。为了播放音乐,我创建了一个单独的服务。因为我想让它一直保持播放状态,所以我调用了Service.startForeground()。当我编译 Android O (SDK 级别 27) 时,由于 Android 的“新”后台执行限制,我必须使用 Context.startForegroundService()。

这样做还不错,但是当用户暂停播放时,我希望通知能够被关闭。在过去,我可以调用stopForeground(),但在 Android O 上没有效果。是否有其他方法来在后台和前台服务之间切换或者实现这种行为的其他机会?像 Google Play 音乐这样的应用程序正是使用这种通知模式,但是他们是如何做到的呢?


stopForeground() 中,您要传递哪个标志? - Sagar
1
我的错。我使用了 stopForeground(boolean: removeNotification)。使用标志 STOP_FOREGROUND_DETACH 就可以了。谢谢! - HYMXDEV
我正要建议这个。很高兴你自己解决了。 - Sagar
你应该将它作为答案发布,而不是在问题中更新。 - Sagar
2
哪个类声明了STOP_FOREGROUND_DETACH? - Gerry
4个回答

25

发生这种情况是因为我使用了错误的方法。您需要使用 stopForeground(STOP_FOREGROUND_DETACH) 而不是 stopForeground(true)


1
在 Xamarin 代码中:StopForeground(StopForegroundFlags.Remove); // true = Remove not Detach. 从 Service 中:public unsafe void StopForeground(bool removeNotification) - Gerry

1
使用

stopForeground(STOP_FOREGROUND_DETACH)

而不是

stopForeground(true)


1
stopForeground(STOP_FOREGROUND_REMOVE)

如果您想要同时移除通知,请使用此选项。

-2

我遇到了同样的问题,尝试了很多解决方案,后来发现我在AndroidManifest.xml文件中给了一些无用的权限,当我将它们注释掉后,问题就解决了。

被注释掉的权限如下:

<!-- <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> -->
<!-- <uses-permission android:name="android.permission.GET_ACCOUNTS" /> -->
<!-- <uses-permission android:name="android.permission.READ_CONTACTS" /> -->
<!-- <uses-permission android:name="android.permission.VIBRATE"/> -->
<!-- <uses-permission android:name="android.permission.READ_PHONE_STATE"/> -->
<!-- <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> -->

我不认为这些权限与这个问题有任何关系。 - kv1dr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接