1
장치가 가속도계를 감지하면 현재 IntentService에서 건배를 표시하려고합니다. 이를 위해 Handler를 구현할 수있는 방법을 검색하여 배웠습니다. 그러나, 그것은 꽤 작동하지 않습니다. 코드는 오류없이 에뮬레이터에서 컴파일되고 실행되지만 축배는 표시되지 않습니다. 내 코드에서 실수를 찾아내는 데 도움이 될지 궁금합니다. 코드는 아래와 같습니다.onHandleIntent에서 처리기를 만들 때 처리기로 게시 된 IntentService의 토스트가 표시되지 않습니다.
도움이 될 것입니다. onHandleIntent
에서 토스트 메시지에 대한 핸들러 만들기
public class AccelService extends IntentService implements SensorEventListener{
private SensorManager mySensorManager;
private Handler toastHandler;
public AccelService(){
super("AccelerometerIntentService");
}
...
private class ToastRunnable implements Runnable{
String toastText;
public ToastRunnable(String text){
toastText = text;
}
@Override
public void run(){
Toast.makeText(getApplicationContext(), toastText, Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onHandleIntent(Intent intent){
toastHandler = new Handler();
initialize();
}
public void initialize(){
mySensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
if(mySensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) != null){
toastHandler.post(new ToastRunnable("Accelerometer Detected!"));
}
}
...
}
http://stackoverflow.com/questions/5346980/intestervice-wont-shast-toast?rq=1 – marcinj
runnable이 실행되면 로그하고 컨텍스트 매개 변수로 getBaseContext()를 시도하십시오 – Sam
@ marcin_j : 나는 너무 확신하지 못합니다. 제안 된 게시물에 대한 해결책은 정확합니다. IntentService 참조는 'onStartCommand'메서드를 덮어 쓰지 않는다고 설명합니다. 또한 IntentService가 다른 스레드에서 그리고 주위의 다른 작업에서 실행 중이기 때문에 Handler를 갖는 전체 요점이 있습니다. – ElectroJunkie