首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Service.startForeground()在MediaBrowserServiceCompat中

Service.startForeground()在MediaBrowserServiceCompat中
EN

Stack Overflow用户
提问于 2018-08-31 17:36:27
回答 1查看 1.2K关注 0票数 1

我得到了Android仪表板崩溃日志中显示的错误:

然后Context.startForegroundService()没有调用Service.startForeground() (没有可用的位置)

我知道Oreo引入的背景限制,并阅读了this post

但是,对于运行Android磨损8.0的一小部分用户来说,我仍然会遇到这个错误。令人困惑的是,并不是所有的用户都在运行8.0。

根据文档,如果调用Context.startForgroundService(),则必须在5秒内调用服务中的startForeground()来显示通知(假设MediaBrowserCompat正在调用Context.startForgroundService())。

但是,如果我使用的是MediaBrowserServiceCompat,我不确定是否需要这样做。当用户点击播放启动音频播放时,我确实会显示一个前台通知。

代码语言:javascript
复制
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();
    }
};
EN

回答 1

Stack Overflow用户

发布于 2018-10-08 08:14:07

如果您正在运行音频startForegroundService服务,则必须在调用start前台之前使用mediaCompact来附加前台通知,这不会因为背景限制而被系统破坏。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52120360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档