Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 停止服务的问题_Android_Android Service_Android Lifecycle - Fatal编程技术网

Android 停止服务的问题

Android 停止服务的问题,android,android-service,android-lifecycle,Android,Android Service,Android Lifecycle,我有一个名为“Callreceiver”的broadcastreceiver,它会在来电时监听,它会启动一个名为“MyService”的服务,这实际上是SensorEventListener,因此当手机处于某个位置时,我可以做些事情。 好的,一切都正常,但是当我挂断电话时,我想结束服务“MyService”,我尝试context.stopService(I)但它不起作用。然后我尝试this.stopService(null)并且它确实结束了服务,但这只是因为我遇到了一个大错误 我的问题: 通过广

我有一个名为
“Callreceiver”
的broadcastreceiver,它会在来电时监听,它会启动一个名为
“MyService”
的服务,这实际上是
SensorEventListener
,因此当手机处于某个位置时,我可以做些事情。 好的,一切都正常,但是当我挂断电话时,我想结束服务
“MyService”
,我尝试
context.stopService(I)但它不起作用。然后我尝试
this.stopService(null)并且它确实结束了服务,但这只是因为我遇到了一个大错误

我的问题: 通过广播接收器停止服务的正确方式是什么

先谢谢你

package com.example.enablebtwithorientation;

import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.Menu;


public class Callreceiver extends BroadcastReceiver {
String TAG="IncomingInterceptCombo";
static boolean isRinging=false;
int x=0; float roll_angle=0;
int goin_50=0, goin_30=0;

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("Ringer", "ringer started");
        Intent i=new Intent(context, MyService.class);
        if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
                TelephonyManager.EXTRA_STATE_RINGING)) {
            Log.d("Ringer", "ringing");
            isRinging = true;
            context.startService(i);                
        }

        if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
                TelephonyManager.EXTRA_STATE_IDLE)) {
            Log.d("Ringer", "hanging up");
            isRinging = false;
            //context.stopService(i);
        }
    }
}

您可以使用onSensorChanged方法中的
stopSelf()
而不是
stopService(null)

import android.app.Service;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

public class MyService extends Service implements SensorEventListener {
private static final String TAG = "MyService";
protected static final ContextWrapper context = null;
MediaPlayer player;
public SensorManager mSensorManager;
public Sensor mOrientation;
public static float x, y, z;
public AudioManager amanager;


@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();
    Log.d(TAG, "onCreate");
}

@Override
public void onDestroy() {
    Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
    Log.d(TAG, "onDestroy");
}

@Override
public void onStart(Intent intent, int startid) {
    Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
    Log.d(TAG, "onStart");
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    mOrientation = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);        
    mSensorManager.registerListener(this, mOrientation, SensorManager.SENSOR_DELAY_NORMAL);
    Log.d(TAG, "register sensor");
}

@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
    // TODO Auto-generated method stub

}

@Override
public void onSensorChanged(SensorEvent event) {
    // TODO Auto-generated method stub
    float azimuth_angle = event.values[0];
    float pitch_angle = event.values[1];
    float roll_angle = event.values[2];
   Log.d(TAG, "roll_angle: " +roll_angle);

   if(roll_angle>60){Toast.makeText(this, "roll angle over 60" + roll_angle, Toast.LENGTH_LONG).show();
   this.stopService(null);// works, but not in a good way
   }
}

}