2013-11-15 29 views
0

在我的應用程序之一,我必須檢測外部聲音,即使應用程序在後臺。我有一個問題。可以在android中連續檢測外部聲音嗎?

即使應用程序處於後臺模式或關閉狀態,是否可以連續檢測外部聲音?如果是這樣會影響設備電池嗎?

如果這是不可能的,那麼是否有任何替代方法來實現這一目標?

Plz讓我知道這件事。

感謝,

+1

您可以使用錄音示例代碼創建服務。是的,如果它在後臺連續運行,它會耗盡你的電池。即使沒有內存,操作系統也可能會殺死它。 – Vigbyor

+0

我同意他 –

+0

感謝您的寶貴迴應 – Rafeeq

回答

0

編輯:我可能會誤解你

這裏有一個片段我用它來看看是否符合我的服務的MediaPlayer一起audiofocus變化。你不會知道什麼是打不過你就會知道,如果外在的東西請求音頻:

OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() { 
    public void onAudioFocusChange(int focusChange) { 
     //Manage audiofocus changes 

     if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT 
       && mp != null) { 
      if (mp.isPlaying()) 
       pausePlaying(); 
     } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN 
       && mp != null) { 
      if (!mp.isPlaying()) 
       pausePlaying(); 
     } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS 
       && mp != null) { 
      am.abandonAudioFocus(afChangeListener); 

      if (mp.isPlaying()) 
       pausePlaying(); 
      Log.d("FOCUS", "Focus Changed AUDIOLOSS "); 
     } 
    } 
}; 
1

我目前正在對這樣的事情,我已經使用了延伸服務http://developer.android.com/guide/components/services.html類。

正如上面提到的,如果它持續運行,您可能會得到android ANR kill wait選項。有兩種方法可以解決這個問題。

  1. 請確保您的服務未在主UI線程上運行,無論是使用Async還是隻是自己對其進行線程化。除此之外,儘量避免使用ANR,儘可能少地進行工作。

  2. 我限制了每個服務持續的時間。即服務偵聽幾秒鐘,運行分析並保存,如果滿足條件,則在調用stopSelf()之前創建一個新服務。這可能有點不方便,但它也可以工作,具體取決於你對音頻的實際操作。