1

如果设备检测到加速度计,我目前正在尝试显示来自 IntentService 的祝酒词。为此,我搜索并了解到我可以实现一个处理程序。但是,它并不完全有效。代码在模拟器上编译和运行没有任何错误,但 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!"));
        }
    }
    ...
}
4

1 回答 1

1

为 Toast 消息创建处理程序会将onHandleIntent其绑定到错误的线程:

在工作线程上调用此方法并请求处理。

或者显式设置处理程序的线程,例如,new Handler(getMainLooper())或者在onCreate.

于 2014-03-05T00:51:26.920 回答