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