यह वह कोड है जिसे मैं पृष्ठभूमि में चल रही अपनी सेवा को रोकने के लिए चला रहा हूं। अगर मैं स्टॉप बटन दबाता हूं तो सेवा चलती रहती है। ऑनडेस्ट्रॉय फ़ंक्शन से टोस्ट चलता है लेकिन सेवा बंद नहीं होती है। कोई मदद?

   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button btnStart = (Button) findViewById(R.id.btnStart);
    btnStart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startService(new Intent(getBaseContext(), myServices.class));
            //dialContactPhone("123123123");
        }
    });
    Button btnstop = (Button) findViewById(R.id.btnStop);
    btnstop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            stopService(new Intent(getBaseContext(), myServices.class));
        }
    });

}

यह सेवा में कोड है।

@Override
public int onStartCommand(Intent intent,  int flags, int startId) {
    sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    if (sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) != null) {
        // success! we have an accelerometer

        accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
        vibrateThreshold = accelerometer.getMaximumRange() / 2;
        running = false;
    } else {
        // fai! we dont have an accelerometer!
    }

    //initialize vibration

return START_STICKY;
}

@Override
public void onDestroy(){
    super.onDestroy();
    Toast.makeText(this, "Servive stoped", Toast.LENGTH_LONG).show();
}
1
Mickey Evers 25 अप्रैल 2017, 01:02
1
अगर "सेवा बंद नहीं होती" से आपका मतलब है "सेंसर रीडिंग आती रहती है", ऐसा इसलिए है क्योंकि आपने अपने श्रोता को onDestroy() में अपंजीकृत नहीं किया है।
 – 
CommonsWare
25 अप्रैल 2017, 01:04
हाँ मेरा यही मतलब है। मुझे श्रोता का पंजीकरण कैसे रद्द करना चाहिए?
 – 
Mickey Evers
25 अप्रैल 2017, 01:07

1 उत्तर

सबसे बढ़िया उत्तर

अगर "सेवा बंद नहीं होती" से आपका मतलब है "सेंसर रीडिंग आती रहती है", ऐसा इसलिए है क्योंकि आपने अपने श्रोता को onDestroy() में अपंजीकृत नहीं किया है। ऐसा करने के लिए unregisterListener() को SensorManager पर onDestroy() पर कॉल करके, अपने श्रोता (जो ऐसा लगता है कि this है) को पास करते हुए करें।

1
CommonsWare 25 अप्रैल 2017, 01:09