我有一个服务,在一段时间内调用警报管理器,我想停止服务。我只取消了警报管理器,但我的服务仍然在后台运行。
这是我在主要活动中的代码
start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (!cd.isConnectingToInternet()) {
showDialog(noInternetDialog);
} else if (start.getText().toString().equalsIgnoreCase(getResources().getString(R.string.start_interval))) {
countLimit.setEnabled(false);
timeLimit.setEnabled(false);
start.setText(R.string.stop_interval);
start.refreshDrawableState();
// To save send configuration
saveSendConfiguration();
// Show sms to send
XMLParser read = new XMLParser();
String numberOfUnsend = read.getXmlFromUrl(baseURL + SMScount);
status.setText(numberOfUnsend);
Intent downloader = new Intent(context, AlarmReceiver.class);
downloader.putExtra("time", timeLimit.getSelectedItem()
.toString());
downloader.putExtra("count", countLimit.getSelectedItem()
.toString());
downloader.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
pendingIntent = PendingIntent.getBroadcast(context, 0,
downloader, PendingIntent.FLAG_CANCEL_CURRENT);
int delay = Integer.parseInt(countLimit.getSelectedItem()
.toString());
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
10 * 1000, delay * 60000, pendingIntent);
Log.i(tag, "Call from main activity");
} else {
alarmManager.cancel(pendingIntent);
start.setText(R.string.start_interval);
start.refreshDrawableState();
countLimit.setEnabled(true);
timeLimit.setEnabled(true);
Log.i(tag, "Alarm Cancel");
}
}
});
这是我的闹钟接收器代码
public class AlarmReceiver extends BroadcastReceiver {
private static String tag = "Saeed";
@Override
public void onReceive(Context context, Intent intent) {
Intent update = new Intent(context, IntervalService.class);
String time = intent.getStringExtra("time");
String count = intent.getStringExtra("count");
update.putExtra("time", time);
update.putExtra("count", count);
Log.i(tag, "Call service from Alaram Receiver," + time + "," + count);
context.startService(update);
}
}
这是我的服务代码
public class IntervalService extends IntentService {
private static final String tag = "Saeed";
private String baseURL;
private DatabaseHandler db;
private int time;
private int count;
private SharedPreferences pref;
ConnectionDetector cd;
public IntervalService() {
super("Auto Interval");
}
@Override
protected void onHandleIntent(Intent intent) {
Log.i(tag, "Interval Service implementation was run");
PreferenceManager.setDefaultValues(this, R.xml.settings, false);
pref = PreferenceManager.getDefaultSharedPreferences(this);
baseURL = pref.getString("baseUrl","");
db = new DatabaseHandler(this);
cd = new ConnectionDetector(getApplicationContext());
time = Integer.parseInt(intent.getStringExtra("time"));
count = Integer.parseInt(intent.getStringExtra("count"));
new Interval().execute(); //this is async task class
}
如何停止主要活动的服务?
答案 0 :(得分:0)
您可以使用:
Intent update = new Intent(context,IntervalService.class); context.stopService(更新);
答案 1 :(得分:0)
您需要取消服务而不是警报管理器
如果组件通过调用startService()启动服务(这会导致对onStartCommand()的调用),那么服务将一直运行,直到它通过stopSelf()停止自身,或者另一个组件通过调用stopService()来停止它。
参考:http://developer.android.com/guide/components/services.html