В настоящее время я пытаюсь показать тост от IntentService, если устройство обнаруживает акселерометр. Для этого я искал и узнал, что могу реализовать обработчик. Однако он не совсем работает. Код компилируется и запускается на эмуляторе без какой-либо ошибки, но тост не отображается. Мне было интересно, не могу ли я помочь найти ошибки в моем коде. Код показан ниже.Тост из 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/intentservice-wont-show-toast?rq=1 – marcinj
Лог, если выполняется runnable & try getBaseContext() как параметр контекста – Sam
@ marcin_j: Я не уверен, что решение предложенного сообщения является правильным. Ссылка IntentService упоминает, что метод onStartCommand не перезаписывается. Кроме того, весь смысл использования Handler заключается в том, что IntentService работает в разных потоках и работает. – ElectroJunkie