服务停止来自mainActivity

时间:2014-05-19 07:51:15

标签: android service

我有一个服务,在一段时间内调用警报管理器,我想停止服务。我只取消了警报管理器,但我的服务仍然在后台运行。

这是我在主要活动中的代码

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
}

如何停止主要活动的服务?

2 个答案:

答案 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