java - 点击后服务不停止

标签 java android android-service togglebutton

我有一项服务,当我单击切换按钮时就会启动。它运行良好,但当我再次单击切换时,我希望服务停止但不起作用。服务还是可以的。这是按钮(我使用首选项来保存按钮的状态):

check = (ToggleButton)v.findViewById(R.id.check1);
final SharedPreferences preferences = getActivity().getPreferences(Context.MODE_PRIVATE);
boolean tgprefshake = preferences.getBoolean("tgprefshake", false);  //default is true
check.setOnCheckedChangeListener(new OnCheckedChangeListener() {                
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if(isChecked){ //do this}
              Log.d("Service", "onClick: starting srvice");
              myService = new Intent(getActivity(), shakeService.class);
              //getActivity().startService(new Intent(getActivity(), shakeService.class));
              getActivity().startService(myService);                         
              SharedPreferences.Editor editor = preferences.edit();
              editor.putBoolean("tgprefshake", true); // value to store
              editor.commit();
          } else {  
              Log.d("Service", "onClick: stopping srvice");
              //getActivity().stopService(new Intent(getActivity(), shakeService.class));
              getActivity().stopService(myService);

              SharedPreferences.Editor editor = preferences.edit();
              editor.putBoolean("tgprefshake", false); // value to store
              editor.commit();
          }
    }
});

if (tgprefshake) //if (tgpref) may be enough, not sure
{
    check.setChecked(true);
}
else
{
    check.setChecked(false);
}

服务:

public class shakeService extends Service implements SensorEventListener{
    // Sensors
    public SensorManager sensorManager;
    private long lastUpdate;
    public ToggleButton check ;
    public Sensor mAccelerometer;

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }
    public void onCreate()
    {
        Log.d("", "onCreate");
        super.onCreate();   
    }
    public void onDestroy() {
        Toast.makeText(this, "Service Stopped", Toast.LENGTH_LONG).show();
            Log.d("Service", "onDestroy");
    }
    public void onStart(Intent intent, int startId)
    {
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        sensorManager.registerListener(this,
                sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                SensorManager.SENSOR_DELAY_NORMAL);
        lastUpdate = System.currentTimeMillis();
    }
    @Override
    public void onAccuracyChanged(Sensor arg0, int arg1) {
        // TODO Auto-generated method stub

    }
    @Override
    public void onSensorChanged(SensorEvent event) {    
        // TODO Auto-generated method stub   
        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
            getWifiVibrating(event); 
        }

    }
    private void getWifiVibrating(SensorEvent event) {
        //myVib.vibrate(50);
        final WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
        float[] values = event.values;
        // Movement
        float x = values[0];
        float y = values[1];
        float z = values[2];

        float accelationSquareRoot = (x * x + y * y + z * z)
            / (SensorManager.GRAVITY_EARTH * SensorManager.GRAVITY_EARTH);
        long actualTime = System.currentTimeMillis();
        if (accelationSquareRoot >= 3) {
          if (actualTime - lastUpdate < 600) {
            return;
          }
          lastUpdate = actualTime;
          wifiManager.setWifiEnabled(true);
          Toast.makeText(this, "Wi-fi On", Toast.LENGTH_SHORT)
          .show();
    } 
}

public void onResume() {

    // register this class as a listener for the orientation and
    // accelerometer sensors
    sensorManager.registerListener(this,
    sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
    SensorManager.SENSOR_DELAY_NORMAL);
}

public void onPause() {
    // unregister listener
    sensorManager.unregisterListener(this);
}

哪里出错了?当我关闭开关但服务仍然有效时,它显示“服务已停止”。

最佳答案

在服务的 onDestroy() 实现结束时调用 super.onDestroy()。

关于java - 点击后服务不停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20653794/

相关文章:

java - Primefaces : How to update a grid/table in the parent form from a command button on the child form in a dialog (dialog residing on the parent form)?

java - 限制增减整数

java - 即使添加到构建路径并清理后也无法解决导入问题

android - 需要将图像保存到手机内存的图库文件夹中(不是 SD 卡)

java - 安排Android服务在手机重启后重新启动

java - JMockit:如何用新的模拟覆盖已经模拟的方法?

java - 如何在谷歌地图 v2 android 上显示纬度/经度标记

Android 处理吉他调音器的音频

android - 后台运行更新服务

android - 如何在 Android 中的 Activity 之间共享套接字类实例?