【问题标题】:Phone vibrating after every 5 sec after service start in Oreo奥利奥服务开始后,手机每 5 秒振动一次
【发布时间】: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 android-service android-notifications android-8.0-oreo


【解决方案1】:

您必须有 26 岁及以上的通知通道,并且需要启动前台服务以避免 Android 将其关闭。将通知通道代码放在您的 onCreate of Service 中,因为您只有 5 秒的时间来启动它。设置通知频道后,您可以将声音和振动静音。如果您不想要任何声音或振动,请确保将通知重要性设置为 LOW,并将这两个属性添加到频道(注意 - 这不是完整代码,请参阅链接以获取完整示例):

NotificationChannel channel = new NotificationChannel(CHANNEL_ID, "Channel human readable title", NotificationManager.IMPORTANCE_LOW);
        channel.setSound(null, null);
channel.enableVibration(false);

Oreo 对通知渠道的要求很好的解释:https://medium.com/cr8resume/notification-in-android-8-0-oreo-implementing-notification-channels-d65b0f81ca50

关于启动前台服务的有用信息:Android O - Old start foreground service still working?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    相关资源
    最近更新 更多