简体   繁体   English

带按钮的 Android 前台服务通知

[英]Android foreground service notification with buttons

I'm trying to add 3 buttons to my foreground service notification, but all guides i followed failed我正在尝试向前台服务通知添加 3 个按钮,但我遵循的所有指南都失败了

this answer says to add action: https://stackoverflow.com/a/49539463/5679560这个答案说要添加操作: https : //stackoverflow.com/a/49539463/5679560
this tutorial says to use remoteview https://developer.android.com/training/notify-user/custom-notification本教程说使用远程视图https://developer.android.com/training/notify-user/custom-notification

I've tried both options but my notification keeps the default look, even the text doesn't change at all, my notification refers to the foreground service notification is this the problem?我已经尝试了这两个选项,但我的通知保持默认外观,即使文本根本没有改变,我的通知指的是前台服务通知,这是问题吗? isnt possible to add a small button in the foreground service notification?是否可以在前台服务通知中添加一个小按钮?

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this))
        startActivity(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + this.getPackageName())).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));

    else if (intent.hasExtra(com.tomatedigital.androidutils.Constants.Intent.WINDOW_SERVICE_LAYOUT)) {
        new FloatingWindow(this, LayoutInflater.from(this).inflate(intent.getIntExtra(Constants.Intent.WINDOW_SERVICE_LAYOUT, 0), null), "casa");
        startForeground(1, Notification.startFloatingWindow(this));
    }

    return START_REDELIVER_INTENT;
}

  public static android.app.Notification startFloatingWindow(@NonNull final Context context) {


        @SuppressLint("RemoteViewLayout") RemoteViews contentView = new RemoteViews(context.getPackageName(), R.layout.notification_floating_window);

        //HelperActivity will be shown at step 4
/*
        Intent stop = new Intent(context, MeuServico.class);
        stop.putExtra("stop", "do");//if necessary

        PendingIntent pRadio = PendingIntent.getActivity(ctx, 0, radio, 0);
        //R.id.radio is a button from the layout which is created at step 2  view.setOnClickPendingIntent(R.id.radio, pRadio);

        //Follows exactly my code!
        Intent volume = new Intent(ctx, tsapalos11598712.bill3050.shortcuts.helper.HelperActivity.class);
        volume.putExtra("DO", "volume");</p >

                //HERE is the whole trick. Look at pVolume. I used 1 instead of 0.
                PendingIntent pVolume = PendingIntent.getActivity(ctx, 1, volume, 0);
        view.setOnClickPendingIntent(R.id.volume, pVolume);
*/
        return new NotificationCompat.Builder(context, Constants.Notification.FLOATING_WINDOW_NID)
                //       .setSmallIcon(R.drawable.ic_notification_logo)
                .setContentTitle("getString(R.string.foregroundNotification)")
                .setContentText("text")
                //.setCustomContentView(contentView)
                .addAction(R.drawable.ic_stop, "teste", null)
                .setPriority(NotificationCompat.PRIORITY_LOW).build();
    }
}

A little more context to the problem.问题的更多背景。 I'm trying to create a floating window and have a service controlling it.我正在尝试创建一个浮动窗口并有一个服务来控制它。 Everything runs fine, the service starts -> goes foreground -> creates the floating window which shows fine even when app is background一切运行正常,服务启动 -> 进入前台 -> 创建浮动窗口,即使应用程序处于后台也能正常显示

but i want to add a CLOSE button in the notification so user can close the floating window...但我想在通知中添加一个关闭按钮,以便用户可以关闭浮动窗口...

Btw the text in the floating window says "My app is running tap here to see more info" which definitely isn't what i wrote for the notification顺便说一句,浮动窗口中的文字说“我的应用程序正在运行,点击此处查看更多信息”这绝对不是我为通知写的

在此处输入图片说明

Show a notification like this :显示这样的通知:

  NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL);
  builder.setContentTitle("Alarm for: " + (is24 ? _24H : _12H) + (isSnoozeAction ? " (Snoozed)" : ""))
         .setContentText(alarmLabel)
         .setSmallIcon(R.drawable.ic_n_alarm)
         .setColor(ContextCompat.getColor(context, R.color.colorPrimaryDark))
         .setContentIntent(pi)
         .addAction(new NotificationCompat.Action(R.drawable.ic_n_snooze, "Snooze", actionSnooze))
         .addAction(new NotificationCompat.Action(R.drawable.ic_n_cancel, "Dismiss", actionDismiss));

  manager.notify(NOTIFICATION_ID, builder.build());

addAction adds a button to the notification, and the third argument passed is a PendingIntent , which represents the actual action. addAction向通知添加一个按钮,传递的第三个参数是PendingIntent ,它代表实际操作。

PendingIntent actionDismiss = PendingIntent.getBroadcast(context, 113, receiverDismiss,
                                                               PendingIntent.FLAG_ONE_SHOT);

PendingIntent actionSnooze = PendingIntent.getBroadcast(context, 114, receiverSnooze,
                                                              PendingIntent.FLAG_ONE_SHOT);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM