Я получаю эту ошибку, отображаемую в журналах сбоев панели управления Android:
Context.startForegroundService () не вызывал Service.startForeground () (местоположение недоступно)
Мне известны Фоновые ограничения, введенные в Oreo, и я прочитал этот пост .
Однако, я все еще получаю эту ошибку для небольшого процента моих пользователей, которые используют Android Wear 8.0. Что сбивает с толку, так это то, что не все пользователи используют 8.0.
Согласно документации, если вы звоните Context.startForgroundService()
, вы должны показать уведомление, позвонив в службу startForeground()
в течение 5 секунд (я предполагаю, что 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();
}
};