停止由待处理意图启动的服务

时间:2014-04-25 06:15:36

标签: android service android-pendingintent

我正在使用位置服务来获取位置更新。

我通过传递一个待处理的意图来启动服务,如下所示

    btnStart.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if (!isMyServiceRunning()) {
                mIntentService = new Intent(StartOrStopService.this,
                        LocationServices.class);
                mPendingIntent = PendingIntent.getService( 
                        StartOrStopService.this, 1, mIntentService, 0);

                locationrequest = LocationRequest.create();
                locationrequest.setInterval(1000*60);
                locationClient.requestLocationUpdates(locationrequest,
                        mPendingIntent);
                Toast.makeText(StartOrStopService.this, "Starting Service",
                        Toast.LENGTH_LONG).show();

            } else
                Toast.makeText(StartOrStopService.this,
                        "Service already running", Toast.LENGTH_LONG)
                        .show();

        }
    });

上面的代码工作正常,只需点击一下按钮即可启动服务。

此外,我还有一个按钮,我用它来停止服务,由未决意图启动,下面是我试过的

   btnStop.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if (isMyServiceRunning()) {
                StartOrStopService.this.stopService(new Intent(StartOrStopService.this,
                        LocationServices.class));
                Toast.makeText(StartOrStopService.this,
                        "Stopping service",
                        Toast.LENGTH_LONG).show();
                System.out.println("Stop service");

            } else {
                Toast.makeText(StartOrStopService.this,
                        "No Services are running presently",
                        Toast.LENGTH_LONG).show();
            }

        }
    });

但我无法停止服务。有人可以告诉我我正在做的错误是什么。还建议我一些建议?? ..

提前致谢:)

2 个答案:

答案 0 :(得分:1)

我认为你并不是说你想要停止服务。我认为你的意思是你想停止让位置客户端开始你的服务。为此,您只需致电removeLocationUpdates()并传递您在开始请求位置更新时使用的PendingIntent

    mIntentService = new Intent(StartOrStopService.this, LocationServices.class);
    mPendingIntent = PendingIntent.getService(StartOrStopService.this, 1,
                                  mIntentService, 0);

    locationClient.removeLocationUpdates(mPendingIntent);

答案 1 :(得分:0)

唯一的方法是将服务设计为通过intent命令停止。因此,您应该修改您的LocationServices类来处理这样一个"特殊意图"。