如果设备检测到加速度计,我正在尝试从IntentService显示吐司。为此,我搜索并了解到我可以实现一个Handler。但是,它并不是很有效。代码在模拟器上编译并运行,没有任何错误,但是toast没有显示。我想知道我是否可以获得一些帮助来发现我的代码中的错误。代码如下所示。
任何帮助将不胜感激!
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!"));
}
}
...
}
答案 0 :(得分:1)
在onHandleIntent
中为Toast消息创建处理程序将其绑定到错误的线程:
此方法在工作线程上调用并处理请求。
显式设置处理程序的线程,例如new Handler(getMainLooper())
或在onCreate
中创建处理程序。