14
AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

switch (am.getRingerMode()) {
    case AudioManager.RINGER_MODE_SILENT:
        Log.i("MyApp","Silent mode");
    break;

    case AudioManager.RINGER_MODE_VIBRATE:
        Log.i("MyApp","Vibrate mode");
    break;

    case AudioManager.RINGER_MODE_NORMAL:
        Log.i("MyApp","Normal mode");
    break;
}

上記のコードから、呼び出し音モードを取得できます。私がしたいのは、呼び出し音モードの変化を聞いて関数を呼び出すことです。

私が聞いたのは、AudioManagerを登録できるということです。RINGER_MODE_CHANGED_ACTIONを実行し、broadcastreceiveronReceiveメソッドで変更インテントをリッスンします。はっきり聞こえます。しかし、私はアンドロイドに不慣れで、本当にそれを書く方法を知りません。これやあれを使うと言う代わりに、コードを書いて、それがどのように機能するかを正確に示すことができる人はいますか:)ありがとう

4

3 に答える 3

21

ブロードキャストを処理する、またはのonCreate()メソッド内で次のコードを使用します。ActivityService

      BroadcastReceiver receiver=new BroadcastReceiver(){
          @Override
          public void onReceive(Context context, Intent intent) {
               //code...
          }
      };
      IntentFilter filter=new IntentFilter(
                      AudioManager.RINGER_MODE_CHANGED_ACTION);
      registerReceiver(receiver,filter);
于 2011-09-20T10:59:18.430 に答える
13

別の解決策は、マニフェストにアクションを持つレシーバーを追加することです。

<receiver android:name=".receivers.RingerModeStateChangeReceiver" >
    <intent-filter>
        <action android:name="android.media.RINGER_MODE_CHANGED" />
    </intent-filter>
</receiver>

クラスRingerModeStateChangeReceiverはBroadcastReceiverを拡張する必要があります。

于 2012-03-01T18:07:22.727 に答える
0

これがKotlinのアップデートバージョンです。これをライフサイクルの下に置きonCreate()ます。

this.activity?.registerReceiver(object : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            if (intent.action == AudioManager.RINGER_MODE_CHANGED_ACTION) {
                // Set Player Volume
            }
        }
    }, IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION))
于 2018-03-20T07:26:33.910 に答える