提问者:小点点

Service.startForeground() in MediaBrowserServiceCompat


我在Android仪表板崩溃日志中收到此错误:

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

我知道奥利奥引入的背景限制,并通读了这篇文章。

然而,我仍然有一小部分运行Android Wear 8.0的用户出现了这个错误。令人困惑的是,并非所有用户都在运行8.0。

根据留档,如果您调用Context. startForground Service(),您必须在5秒内通过调用服务中的startForeground()来显示通知(我假设MediaBrowserCompat正在调用Context.startForground Service())。

但是,如果我使用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();
    }
};

共1个答案

匿名用户

如果您正在运行音频媒体压缩服务,则必须在调用 startforeground 之前使用 startForegroundService 来附加前台通知,这不会由于后台限制而被系统破坏。