RINGING时,用于STREAM_RING的Android setStreamVolume并不总是有效

时间:2012-06-30 12:33:38

标签: android volume android-audiomanager

我正在尝试做这个简单的应用程序,允许手机响铃,但在Android 4(ICS)下接收通知时不发出声音。为此,我将响铃/通知流设置为0(静音)。接听电话时,我将铃声音量设置为max(p.e.7),然后在空闲时将其调回0(静音)。

要做到这一点,我使用这个简单的代码。

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开始。那么,有没有办法重新启动铃声?有人可以帮帮我吗?感谢。

1 个答案:

答案 0 :(得分:0)

我必须说你应该尝试给你的广播接收器高度优先。这可以像下面这样做

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

参考链接&gt;&gt; Highest priority

它可以/可以解决您的问题。