【发布时间】:2018-08-09 15:25:40
【问题描述】:
在我最近将目标提高到 27 之前,我的应用一直运行良好。 我有一个后台服务,它获取位置并计算用户行进的距离。 在我的服务开始计算距离时进行此更改后,手机每 3-5 秒振动一次。 我还没有写任何代码来振动。
即使我的应用程序在前台说明距离的进度,我也已启动通知。
这是通知代码:
private NotificationCompat.Builder getForegroundNotificationBuilder() {
int rupees = Utils.convertDistanceToRupees(mCauseData.getConversionRate(), getTotalDistanceCoveredInMeters());
String amountString = UnitsManager.formatRupeeToMyCurrency(rupees);
String pauseResumeAction, pauseResumeLabel, contentTitle;
int pauseResumeIntent;
int pauseResumeDrawable;
if (tracker.isRunning()) {
pauseResumeAction = getString(R.string.notification_action_pause);
pauseResumeLabel = getString(R.string.pause);
contentTitle = getString(R.string.impact_with_sponsor, mCauseData.getSponsor().getName());
pauseResumeIntent = MainActivity.INTENT_PAUSE_RUN;
pauseResumeDrawable = R.drawable.ic_pause_black_24px;
} else {
pauseResumeAction = getString(R.string.notification_action_resume);
pauseResumeLabel = getString(R.string.resume);
contentTitle = getString(R.string.paused);
pauseResumeIntent = MainActivity.INTENT_RESUME_RUN;
pauseResumeDrawable = R.drawable.ic_play_arrow_black_24px;
}
/*Intent pauseResumeIntent = new Intent(this, NotificationActionReceiver.class);
pauseResumeIntent.setAction(pauseResumeAction);
PendingIntent pendingIntentPauseResume = PendingIntent.getBroadcast(getContext(), 100, pauseResumeIntent,
PendingIntent.FLAG_UPDATE_CURRENT);*/
NotificationCompat.Builder mBuilder =null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mBuilder = Utils.createChannelForNotification(getContext(),getContext().getString(R.string.channel_description_workout));
}else
{
mBuilder = new NotificationCompat.Builder(this);
}
mBuilder.setContentTitle(contentTitle)
.setContentText("Test distance")
.setSmallIcon(getNotificationIcon())
.setColor(ContextCompat.getColor(getContext(), R.color.bright_sky_blue))
.setLargeIcon(getLargeIcon())
.setTicker(getBaseContext().getResources().getString(R.string.app_name))
.setOngoing(true)
.setVisibility(1);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
mBuilder.addAction(pauseResumeDrawable, pauseResumeLabel, MainApplication.getInstance().createNotificationActionIntent(pauseResumeIntent, pauseResumeAction))
.addAction(R.drawable.ic_stop_black_24px, "Stop", MainApplication.getInstance().createNotificationActionIntent(MainActivity.INTENT_STOP_RUN, getString(R.string.notification_action_stop)));
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
mBuilder.setVisibility(Notification.VISIBILITY_PUBLIC);
}
mBuilder.setContentIntent(MainApplication.getInstance().createAppIntent());
return mBuilder;
}
这就是我启动服务的方式:
Intent intent = new Intent(this, WorkoutService.class);
startService(intent);
【问题讨论】:
-
Android Oreo 对服务有限制:developer.android.com/about/versions/oreo/background 我认为您的后台服务每 5 秒被杀死一次,然后由系统重新创建。请阅读该链接。
标签: android android-service android-notifications android-8.0-oreo