如何在安卓系统中停止一个前台服务的通知?

问题描述 投票:1回答:1

我在我的应用程序中使用一个前台服务,我需要停止这个服务从一个按钮,这是存在于通知本身,而不是打开活动。

这是我的活动,我从那里启动服务。

serviceIntent = new Intent(getApplicationContext(),BackgroundService.class);
        serviceIntent.putExtra("ip",ipAdd);
        serviceIntent.putExtra("token",token);
        serviceIntent.putExtra("port",portNo);
        serviceIntent.putExtra("resource",resourceId);
        serviceIntent.putExtra("userName",username);
        startService(serviceIntent);
        ClosingBackGroundService.getMainActivityContext(MainActivity.this);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                stopService(serviceIntent);
            }
        });

我正在使用一个类来显示通知上的按钮,并试图关闭活动

public class ClosingBackGroundService extends BroadcastReceiver {

   static Context mainActContext;
    public static void getMainActivityContext(Context context){
        mainActContext = context;
    }
    @Override
    public void onReceive(Context context, Intent intent) {
       mainActContext.stopService(MainActivity.serviceIntent);
        Log.i("Service","closed");
    }
}
 @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
       registerReceiver(broadcastReceiver, filter);
        Intent notificationIntent = new Intent(this,LoginActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this,0,notificationIntent,0);
        Intent closingIntent = new Intent(this,ClosingBackGroundService.class);
        PendingIntent actionIntent = PendingIntent.getBroadcast(this,0,closingIntent,PendingIntent.FLAG_UPDATE_CURRENT);
    Notification notification = new NotificationCompat.Builder(this,CHANNEL_ID)
            .setOngoing(true)
             .setSmallIcon(R.drawable.logo)
            .addAction(R.mipmap.ic_launcher,"Close Services",actionIntent)
            .setContentIntent(pendingIntent)
            .setAutoCancel(true)
            .setContentText("Processes Running In BackGround").build();
    ipAdd = intent.getStringExtra("ip");
    port = intent.getStringExtra("port");
    token = intent.getStringExtra("token");
    resourceId = intent.getIntExtra("resource",0);
    username = intent.getStringExtra("userName");
    runnableForGps.run();
    runnableForSendingGpsData.run();
    runnableForBluetooth.run();
    runnableForsendingBTData.run();
    startForeground(1,notification);

    return START_STICKY;
    }

当我按下按钮时,通知消失了,但进程一直在工作。

java android android-notifications
1个回答
0
投票

你不需要创建 BroadCast 阻止 Service. 试试这个

private static final String ACTION_STOP_LISTEN = "action_stop_listen";
Intent intent = new Intent(this, ClosingBackGroundService.class);
intent.setAction(ACTION_STOP_LISTEN);
PendingIntent actionIntent = PendingIntent.getService(this, 123, intent, PendingIntent.FLAG_UPDATE_CURRENT);
addAction(R.mipmap.ic_launcher,"Close Services",actionIntent)

onStartCommand 检查你 Intent 行动

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
        if (intent != null && ACTION_STOP_LISTEN.equals(intent.getAction())) {
            stopForeground(true);
            stopSelf();
            return START_NOT_STICKY;
        }
        // your code
}
© www.soinside.com 2019 - 2024. All rights reserved.