设备休眠时TTS不起作用

时间:2013-05-19 15:00:58

标签: android sleep text-to-speech

我制作了一个监控加速度传感器的程序,并在服务中使用TTS测量某个值时说出某些内容。当设备打开时,一切正常,但是当它进入睡眠状态时有时它可以正常工作,有时它会在一段时间后工作,有时它就像我按下电源按钮唤醒设备一样,有时根本不起作用。有什么想法吗?

public class MyService extends Service implements SensorEventListener, OnInitListener {

    private SensorManager SenMan;
    private Sensor AccSen;
    private TextToSpeech mTTS = null;
    private PowerManager pm;
    private WakeLock wl;

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        SenMan = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        AccSen = SenMan.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        SenMan.registerListener(this, AccSen, SensorManager.SENSOR_DELAY_NORMAL);
        pm = (PowerManager)getSystemService(POWER_SERVICE);
        wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "TAG");
    }

    @Override
    public void onDestroy() {
        SenMan.unregisterListener(this);
        super.onDestroy();
    }

    @Override
    public final void onAccuracyChanged(Sensor sensor, int accuracy) {}

    @Override
    public final void onSensorChanged(SensorEvent event) {
        double a = Math.sqrt(Math.pow(event.values[0], 2) + Math.pow(event.values[1], 2) + Math.pow(event.values[2], 2));
        if (Math.abs(a - 9.8) / 0.98 > 25) Say();
    }

    private void Say() {
        wl.acquire();
        mTTS = new TextToSpeech(this, this);        
    }

    @Override
    public void onInit(int status) {
        if (status == TextToSpeech.SUCCESS)
            mTTS.speak("Text to say", TextToSpeech.QUEUE_FLUSH, null);
        wl.release();
    }
}

1 个答案:

答案 0 :(得分:-1)

当设备处于睡眠状态时,TTS将无法工作。当设备断电,取出电池或用大锤砸碎时,TTS也不起作用。当设备处于唤醒状态时,TTS 工作,或者因为您使用电源按钮将其唤醒,或者其他东西唤醒设备(例如,AlarmManager,来电)。

当设备处于睡眠状态时,传感器可能会也可能不会工作,具体取决于操作系统版本和设备制造商。

因此,要么您需要使用WakeLock来保持设备唤醒(电池成本很高),要么您将不得不提出另一个应用程序的想法。