AudioManager(オーディオマネージャー)


このセクションの紹介:

マルチメディアの最初のセクションでは、SoundPool を使用して Duang の例を作成しました。子豚がボタンをクリックした後、突然「Duang」と鳴りました。 一音、その音は赤ちゃんを怖がらせて死ぬほどでした1.jpg 幸い勤務時間中ではなかったので、こっそりブログを書いてマネージャーに知らせました。 それはあなたを殺します~ まあ、わかりました、音量に関しては、Android が提供する API (音量コントロール) を導入する必要があります:

AudioManager (オーディオ マネージャー) 、このクラスは Android.Media Under にあります。パッケージでは、音量調整や着信音モードに関する操作が提供されます。 このセクションでは、短いムービーを見る前に、デモ、つまり簡単なミュートを作成する方法を学びます。 デモに入り、ミュートをクリックして、2.gif、話してください~ さて、早速、このセクションを始めましょう!

公式 API ドキュメント: AudioManager


1. AudioManager オブジェクト インスタンスを取得します

AudioManager audiomanage = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);


2. 関連の詳細な説明メソッド

よく使用されるメソッド:

  • ボリューム調整(int方向、intフラグ): 携帯電話の音量を制御し、1 単位で上下に調整します。最初のパラメータ AudioManager.ADJUST_LOWER に従って判断します。これは 1 単位で下げることができ、AudioManager.ADJUST_RAISE で調整できます。 1 つのユニット
  • adjustStream Volume(int streamType 、 int 方向、 int flags): 上記と同じですが、サウンドの種類を調整することができます 1) streamType パラメータはサウンドの種類を指定します。 STREAM_ALARM: 携帯電話のアラーム STREAM_MUSIC: 携帯電話の音楽
    STREAM_RING: 電話の着信音 STREAM_SYSTEAM : 携帯電話システム
    STREAM_DTMF: トーン STREAM_NOTIFICATION: システムプロンプト
    STREAM_VOICE_CALL: 音声通話 2) 2 番目のパラメータは上記と同じで、音量を増減します。 3) AudioManager.FLAG_SHOW_UIなどのオプションのフラグビット、進行状況バーの表示、AudioManager.PLAY_SOUND: サウンドの再生
  • setStreamVolume(int streamType, int Index, intflags): ボリュームサイズを直接設定
  • getMode (): 現在のオーディオモードを返します
  • setMode(): サウンドモードを設定します 以下のモードがあります: MODE_NORMAL(通常)、MODE_RINGTONE(着信音)、MODE_IN_CALL(電話)、MODE_IN_COMMUNICATION(通話)
  • getRingerMode( ): 現在の着信音モードを返します
  • setRingerMode(int streamType): 着信音モードを設定します いくつかのモードがあります。 RINGER_MODE_NORMAL (通常)、RINGER_MODE_SILENT (ミュート)、RINGER_MODE_VIBRATE (振動) など: 携帯電話の現在の音量を取得します。最大値は 7、最小値は 0 です。0 に設定すると、自動的に振動モードに調整されます
  • getStreamMaxVolume(int streamType): 特定の音量の最大値を取得します。電話機のサウンドタイプ
  • setStreamMute(int streamType, boolean state): 電話機の特定のサウンドタイプをミュートに設定します
  • setSpeakerphoneOn(boolean on): スピーカーをオンにするかどうかを設定します
  • setMicrophoneMute (boolean on): マイクミュートを許可するかどうかを設定します
  • isMicrophoneMute(): マイクがミュートかオンかを決定します
  • isMusicActive(): アクティブな音楽があるかどうかを決定します
  • isWiredHeadsetOn(): 決定しますヘッドフォンが接続されているかどうか
  • その他の方法
:
  • abandonAudioFocus(AudioManager.OnAudioFocusChangeListenerl): オーディオフォーカスを放棄します
  • adjustSuggestedStreamVolume(int,int requestedStreamType intflags): 最も関連性の高いストリーム、または指定されたフォールバック ストリームの音量を調整します
  • getParameters(String Keys): オーディオ ハードウェアのパラメータ値の可変数を設定します
  • getVibrateSetting(int vibrateType):ユーザーの振動は振動タイプに設定されています
  • isBluetoothA2dpOn(): A2DP Bluetooth ヘッドセットのオーディオルーティングがオンかオフかを確認します
  • isBluetoothScoAvailableOffCall(): 現在のプラットフォームが SCO を使用してオフコールのユースケースをサポートしているかどうかを表示します
  • isBluetoothScoOn(): 通信にBluetooth SCOが使用されているかどうかを確認します
  • loadSoundEffects(): 効果音を読み込みます
  • playSoundEffect((inteffectType, float volume): 効果音を再生します
  • egisterMediaButtonEventReceiver(ComponentNameeventReceiver): コンポーネントの MEDIA_BUTTON インテントの唯一のレシーバーを登録します
  • requestAudioFocus(AudioManager.OnAudioFocusChangeListener l, int streamType, int periodHint) オーディオフォーカスのリクエスト
  • setBluetoothScoOn(boolean on): 通信に Bluetooth SCO ヘッドセットの使用をリクエスト
  • startBluetoothSco/stopBluetoothSco()(): Bluetooth SCO オーディオ接続の開始/停止
  • unloadSoundEffects(): サウンドのアンロードエフェクト

3. 使用例

へー、属性はたくさんありますが、そのうちのいくつかは Bluetooth などに関係します。ここでは最も一般的なメソッドの一部のみを説明します。

これまで見たことのない特別なものに出会ったら、もう一度ドキュメントを確認してみましょう。

簡単な例: Mediaplayer を使用して音楽を再生し、AudioManager で音量を調整し、ミュートします。

ちなみに、まずres配下にrawフォルダを作成し、そこにMP3リソースファイルを放り込んでください!

レンダリングの実行:

3.gif

コード実装:

レイアウトコード

activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn_start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="播放" />

    <Button
        android:id="@+id/btn_stop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:enabled="false"
        android:text="停止" />

    <Button
        android:id="@+id/btn_higher"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="调高音量" />

    <Button
        android:id="@+id/btn_lower"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="调低音量" />

    <Button
        android:id="@+id/btn_quite"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="静音" /></LinearLayout>

MainActivity.java:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btn_start;
    private Button btn_stop;
    private Button btn_higher;
    private Button btn_lower;
    private Button btn_quite;
    private MediaPlayer mePlayer;
    private AudioManager aManager;
    //定义一个标志用来标示是否点击了静音按钮
    private int flag = 1;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获得系统的音频对象
        aManager = (AudioManager) getSystemService(Service.AUDIO_SERVICE);
        //初始化mediaplayer对象,这里播放的是raw文件中的mp3资源
        mePlayer = MediaPlayer.create(MainActivity.this, R.raw.countingstars);
        //设置循环播放:
        mePlayer.setLooping(true);
        bindViews();
    }

    private void bindViews() {
        btn_start = (Button) findViewById(R.id.btn_start);
        btn_stop = (Button) findViewById(R.id.btn_stop);
        btn_higher = (Button) findViewById(R.id.btn_higher);
        btn_lower = (Button) findViewById(R.id.btn_lower);
        btn_quite = (Button) findViewById(R.id.btn_quite);

        btn_start.setOnClickListener(this);
        btn_stop.setOnClickListener(this);
        btn_higher.setOnClickListener(this);
        btn_lower.setOnClickListener(this);
        btn_quite.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_start:
                btn_stop.setEnabled(true);
                mePlayer.start();
                btn_start.setEnabled(false);
                break;
            case R.id.btn_stop:
                btn_start.setEnabled(true);
                mePlayer.pause();
                btn_stop.setEnabled(false);
                break;
            case R.id.btn_higher:
                // 指定调节音乐的音频,增大音量,而且显示音量图形示意
                aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                        AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
                break;
            case R.id.btn_lower:
                // 指定调节音乐的音频,降低音量,只有声音,不显示图形条
                aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
                        AudioManager.ADJUST_LOWER, AudioManager.FLAG_PLAY_SOUND);
                break;
            case R.id.btn_quite:
                // 指定调节音乐的音频,根据isChecked确定是否需要静音
                flag *= -1;
                if (flag == -1) {
                    aManager.setStreamMute(AudioManager.STREAM_MUSIC, true);   //API 23过期- -
//                    aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_MUTE,
//                            AudioManager.FLAG_SHOW_UI);   //23以后的版本用这个
                    btn_quite.setText("取消静音");
                } else {
                    aManager.setStreamMute(AudioManager.STREAM_MUSIC, false);//API 23过期- -
//                    aManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_UNMUTE,
//                            AudioManager.FLAG_SHOW_UI);  //23以后的版本用这个
                    aManager.setMicrophoneMute(false);
                    btn_quite.setText("静音");
                }
                break;
        }
    }
}

コードはまだ非常に単純です はい、追加で設定しますミュートメソッド

setStreamMute() は API バージョン 23 で期限切れになりました。 別のメソッドadjustStreamVolume(int, int, int)を使用して、3番目のプロパティ:

ADJUST_MUTEまたはADJUST_UNMUTEを設定できます。

ちなみに、こんなのもあるんです

adjustStreamVolume()の第3引数に振動(Vibrator)を設定すると、 この権限を AndroidManifest.xml に追加する必要があります!

<**uses-permission android:name="android.permission.VIBRATE"**/>


4. コード サンプルのダウンロード

AudioManagerDemo.zip


このセクションの概要:

さて、このセクションでは、音量を調整するための AudioManager の簡単な使用法を説明します。このタイプは、著者によって一般的には使用されません。 さあ、今後新たに取得できるスキルがあれば追加してください〜 ふふ、ミュートデモは書き終わりましたか?実際のニーズと組み合わせる必要があります〜4.gif

それに、今週は会社のWebSocketライブラリがリプレースされるので、ブログの更新頻度が低くなるかもしれません〜。 はい、以上です、ありがとうございます~