首页 > 解决方案 > 通知打开后从 PendingIntent 停止服务

问题描述

我希望服务在单击通知后执行 stopForeground 和 stopSelf,然后运行 ​​pendingIntent。

我曾尝试使用在调试期间检查时从未调用过的 BroadcastReceiver。我也将它添加到清单中。

Intent intentHide = new Intent(this, StopServiceReceiver.class);
PendingIntent hide = PendingIntent.getBroadcast(this, (int) System.currentTimeMillis(), intentHide, PendingIntent.FLAG_CANCEL_CURRENT);

将其添加到构建器

builder.setContentIntent(hide);

广播录制是单独完成的 -

public class StopServiceReceiver extends BroadcastReceiver {
public static final int REQUEST_CODE = 333;

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent service = new Intent(context, TimerService.class);
        context.stopService(service);
    }
}

显现 -

<receiver
        android:name=".StopServiceReceiver"
        android:enabled="true"
        android:process=":remote" />

这是行不通的。通知和服务都处于活动状态。

问题 - 我应该使用 addContent 而不是 setContentIntent 吗?如果是,那么参数应该是什么?我有什么问题吗?这种实施可能有什么问题?谢谢你。

标签: androidbroadcastreceiverandroid-service

解决方案


我在通知中遇到了同样的问题。

这段代码运行良好。

void creatnotifiaction()
{
    public static final String STOP = "com.example.android";
    public static final int REQUEST_CODE = 333;

        filter = new IntentFilter();
        filter.addAction(STOP);

        Intent intentHide = new Intent(STOP);
        PendingIntent hide = PendingIntent.getBroadcast(this,REQUEST_CODE,intentHide,PendingIntent.FLAG_CANCEL_CURRENT);

     registerReceiver(broadcastReceiver, filter);

}

无需在同一类中单独使用广播接收器。

BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        @SuppressLint("ResourceAsColor")
        @Override
        public void onReceive(Context context, Intent intent) {
            final String action = intent.getAction();
            Log.d("notification", "Received intent with action " + action);

            switch (action) {
                case STOP:
                    //your code to stop notifications or service. 

                    break;
         }
});

让我知道这是否适合你。谢谢...快乐的编码。


推荐阅读