我得到了Android仪表板崩溃日志中显示的错误:
然后Context.startForegroundService()没有调用Service.startForeground() (没有可用的位置)
我知道Oreo引入的背景限制,并阅读了this post。
但是,对于运行Android磨损8.0的一小部分用户来说,我仍然会遇到这个错误。令人困惑的是,并不是所有的用户都在运行8.0。
根据文档,如果调用Context.startForgroundService(),则必须在5秒内调用服务中的startForeground()来显示通知(假设MediaBrowserCompat正在调用Context.startForgroundService())。
但是,如果我使用的是MediaBrowserServiceCompat,我不确定是否需要这样做。当用户点击播放启动音频播放时,我确实会显示一个前台通知。
public class MediaActivity {
private MediaBrowserCompat mMediaBrowserCompat;
@Override
public void onCreate() {
super.onCreate(savedInstanceState);
mMediaBrowserCompat = new MediaBrowserCompat(
this,
new ComponentName(this, MediaPlayerService.class),
mMediaBrowserCompatConnectionCallback,
getIntent().getExtras()
);
mMediaBrowserCompat.connect();
}
}
private MediaBrowserCompat.ConnectionCallback mMediaBrowserCompatConnectionCallback = new MediaBrowserCompat.ConnectionCallback() {
@Override
public void onConnected() {
super.onConnected();
final MediaControllerCompat mcc = new MediaControllerCompat(MediaActivity.this, mMediaBrowserCompat.getSessionToken());
mcc.registerCallback(mMediaControllerCompatCallback);
MediaControllerCompat.setMediaController(mActivity, mcc);
}
};
public class MediaPlayerService extends MediaBrowserServiceCompat {
@Override
public void onCreate() {
super.onCreate();
//Should I add a startForeground notification here
}
}
private MediaSessionCompat.Callback mMediaSessionCallback = new MediaSessionCompat.Callback() {
@Override
public void onPlay() {
super.onPlay();
final NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
final NotificationCompat.Builder builder = new NotificationCompat.Builder(this, channelID)
...
startForeground(101, builder.build());
}
@Override
public void onPause() {
super.onPause();
}
};发布于 2018-10-08 08:14:07
如果您正在运行音频startForegroundService服务,则必须在调用start前台之前使用mediaCompact来附加前台通知,这不会因为背景限制而被系统破坏。
https://stackoverflow.com/questions/52120360
复制相似问题