2

私は、Android 4 (ICS) で通知を受信したときに電話を鳴らすことができるが、音を鳴らさないこの単純なアプリを実行しようとしています。そのために、リング/通知ストリームを 0 (ミュート) に設定しました。電話を受けるときは、着信音量を最大 (pe 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);           
         }        
      }
   }  
}

問題は、それが機能する場合と機能しない場合があることです。理由が見つかりません。私は10回自分に電話をかけ、呼び出し音はおそらく6回鳴ります。残りの4回はミュートされていました。変??

アプリケーションが setStreamVolume を 7 に呼び出すのに「時間がかかりすぎる」可能性があることを理解しているので、呼び出しがすでに 0 で開始されているため、時間通りに取得する (そして音が鳴る) 場合もあれば、遅すぎる (音が鳴らない) 場合もあります。音量。それで、呼び出し音を再開する方法はありますか?誰でもこれで私を助けることができますか?ありがとう。

4

1 に答える 1

0

ブロードキャスト レシーバーの優先順位を高くしてみてください。以下のように行うことができます

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

リンク参照 >> 最優先

それはあなたの問題を解決できる/解決するかもしれません。

于 2012-06-30T18:20:54.913 に答える