我正在使用位置服务来获取位置更新。
我通过传递一个待处理的意图来启动服务,如下所示
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();
}
}
});
但我无法停止服务。有人可以告诉我我正在做的错误是什么。还建议我一些建议?? ..
提前致谢:)
答案 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类来处理这样一个"特殊意图"。