2013-06-10 2 views
1

나는 전화가 들어올 때 듣는 "Callreceiver"이라는 브로드 캐스트 수신기를 가지고 있습니다. "MyService"이라는 서비스가 시작됩니다. 실제로는 SensorEventListener 인 서비스가 시작되므로 전화가 특정 위치에있을 때 뭔가 할 수 있습니다. OK, 모든 것이 작동하지만 전화를 끊을 때 "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); 
     } 
    } 
} 

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 
    } 
} 

} 

답변

0

당신은 onSensorChanged 방법에서 stopSelf() 대신 stopService(null)를 사용할 수 있습니다.