2013-05-19 132 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

相關問題