添加服务并在下一个条件下删除它

时间:2014-07-04 05:53:37

标签: android service broadcastreceiver

我需要启动服务并在某些条件下结束它。我之前使用的是 IntentService ,我发现这是不正确的(如果我是对的)。我已经开始在 BroadcastReciever 中使用服务。但仍然无法获得理想的结果。如果需要,我可以详细说明甚至粘贴我的代码。但就目前而言,我只需要流程图或伪代码。 将从首选项设置中检查该条件。如果选中,我想在后台运行该服务,否则停止服务。拜托,任何人都可以帮助我。

编辑:

我的主要活动:

public class MainActivity extends ListActivity {
    private LocalWorldService s;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onResume() {
        super.onResume();
        Intent intent = new Intent(this, LocalWorldService.class);
        bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
    }

    @Override
    protected void onPause() {
        super.onPause();
        unbindService(mConnection);
    }

    private ServiceConnection mConnection = new ServiceConnection() {

        public void onServiceConnected(ComponentName className, IBinder binder) {
            LocalWorldService.MyBinder b = (LocalWorldService.MyBinder) binder;
            s = b.getService();
            Toast.makeText(MainActivity.this, "Connected", Toast.LENGTH_SHORT)
                    .show();
        }

        public void onServiceDisconnected(ComponentName className) {
            s = null;
            Toast.makeText(MainActivity.this, "Disconnected", Toast.LENGTH_SHORT)
            .show();
        }
    };

我的服务:

public class LocalWorldService extends Service {

    private final IBinder mBinder = new MyBinder();
    private ArrayList<String> list = new ArrayList<String>();

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub
        Toast.makeText(getApplicationContext(), "Magnet is on", Toast.LENGTH_LONG).show();
        return Service.START_NOT_STICKY;
    }

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return mBinder;
    }

    public class MyBinder extends Binder{
        LocalWorldService getService(){
            return LocalWorldService.this;
        }
    }

    public List<String> getWordList(){
        return list;
    }

以下是BroadCastReceiver的两个类:

public class MyScheduleReceiver extends BroadcastReceiver{

    private static final long REPEAT_TIME = 15 * 1000;
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        AlarmManager service = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Intent i = new Intent(context, MyStartServiceReceiver.class);
        PendingIntent pending = PendingIntent.getBroadcast( context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT);
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.SECOND, 15);
        service.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), REPEAT_TIME, pending);
    }

public class MyStartServiceReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Intent service = new Intent(context, LocalWorldService.class);
        SharedPreferences pref = PreferenceManager
                .getDefaultSharedPreferences(context);
        Map<String, ?> x = pref.getAll();
        boolean momoMagnetIsOn = (Boolean) x.get("key_momo_magnet");
        if (momoMagnetIsOn){
            context.startService(service);
        }
        else{
            context.stopService(service);
        }
    }

CORRECTION: 我需要覆盖onDestroy()。

1 个答案:

答案 0 :(得分:1)

在服务中覆盖onDestroy方法 当你想要启动服务时,只需要

 startService(new Intent(this, MainService.class));

要随时停止服务,请致电

stopService(new Intent(this, MainService.class));

请记住,需要在AndroidManifest.xml中声明服务。正如您所说,您的服务正在运作。我相信你已经做到了。还是AndroidManifest.xml

 <service android:enabled="true" android:name=".MainService" />