2013-05-19 85 views
0

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

当设备睡着时,TTS不起作用。当设备断电,电池取出或用大锤砸碎时,TTS也不起作用。 TTS 在设备唤醒时工作,或者是因为您使用电源按钮唤醒设备,或者是其他设备唤醒设备(例如,AlarmManager,拨入电话)。

根据操作系统版本和设备制造商的不同,传感器在设备睡着时可能工作也可能不工作。

因此,无论你是否需要使用WakeLock来保持设备的清醒状态(以显着的电池成本),或者你将不得不提出另一个应用程序的想法。

+0

当然,我不希望它的工作,而电池被删除或设备已被砸碎到位!这是android的最大问题之一。我看到其他人也有同样的问题。在用户希望智能手机执行许多任务时,监控传感器并根据其值确定设备是否需要睡眠时的值。 – Vahid

相关问题