2012-06-30 35 views
2

我試圖做這個簡單的應用程序,它允許手機在Android 4(ICS)下接收通知時響鈴但不發聲。爲了做到這一點,我將鈴聲/通知流設置爲0(靜音)。當接聽電話時,我將鈴聲音量設置爲最大值(第7頁),然後在空閒時將其恢復爲0(靜音)。STREAM_RING的Android setStreamVolume在RINGING時並不總是有效

爲此,我使用這個簡單的代碼。

public class ReceiverClass extends BroadcastReceiver 
{ 
    @Override public void onReceive(Context context, Intent intent) 
    {  
     if ("android.intent.action.PHONE_STATE".equals(intent.getAction())) 
     { String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);  
     AudioManager amanager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 

     if (TelephonyManager.EXTRA_STATE_IDLE.equals(state)) 
     { amanager.setStreamVolume(AudioManager.STREAM_RING, 0, 0);   
     } 
     else if (TelephonyManager.EXTRA_STATE_RINGING.equals(state)) 
     { amanager.setStreamVolume(AudioManager.STREAM_RING, 7, 0);   
     }   
     } 
    } 
} 

問題是,它有時可以工作,有時不會。我找不到原因。我給自己打了十次電話,鈴聲聽起來可能是6次。其他4次靜音。奇怪??

我知道我的應用程序可能需要「太長時間」才能將setStreamVolume調用到7,所以也許這樣做有時會按時(和聲音),有時爲時已晚(因此不會響),因爲調用已經從0音量開始。那麼,有沒有辦法重新啓動鈴聲?有人能幫助我嗎?謝謝。

回答

0

我必須說你應該嘗試給你的廣播接收器高優先級。它可以像下面

<intent-filter android:priority="1000"> 
    <action android:name="android.intent.action.PHONE_STATE" /> 
</intent-filter>  

參考鏈接>> Highest priority

它可以/可以解決你的問題來進行。

+0

我已經做了同樣的結果。無論如何,謝謝;-) – Ton

+0

我也試圖扮演自己的默認鈴聲(使用MediaPlayer)。當android失敗並且不播放響鈴時,這工作得很好。但是,如果它沒有失敗,那麼兩個鈴聲都會在重疊的同時聽到,所以結果很糟糕。我希望我知道如何阻止android響鈴(如果它是開啓的)並自行啓動。 – Ton

+1

以下類導致您的問題:[Ringer](http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.4.2_r1/com/android /phone/Ringer.java#Ringer)如果鈴聲音量設置爲0,並且在將音量設置爲除0之外的其他音量之前進入,則返回。 – Matware

相關問題