Java Android全球音频接收器和音频管理器

Java Android全球音频接收器和音频管理器,java,android,performance,audio,broadcastreceiver,Java,Android,Performance,Audio,Broadcastreceiver,在我的应用程序中,我只想允许通过耳机(插孔插件)播放声音。 但我有一个音乐播放器、游戏机和视频播放器 有没有办法制作一个全局音频接收器来控制整个应用程序中的音频。仅允许通过插入式耳机播放声音 到目前为止,我一直在所有活动中使用此功能: //Receiver for Audio to Mute boolean savedStreamMuted = false; protected BroadcastReceiver audioReceiver = new Broadcast

在我的应用程序中,我只想允许通过耳机(插孔插件)播放声音。 但我有一个音乐播放器、游戏机和视频播放器

有没有办法制作一个全局音频接收器来控制整个应用程序中的音频。仅允许通过插入式耳机播放声音

到目前为止,我一直在所有活动中使用此功能:

    //Receiver for Audio to Mute
    boolean savedStreamMuted = false;
    protected BroadcastReceiver audioReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            //AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
            AudioManager audio = MyApp.getAudioManagerSingleton();

            headsetIsPluggedIn = (intent.getExtras().getInt("state") == 1);

            if (headsetIsPluggedIn) //plugged -->> UNMUTE
            {
                Log.e(TAG, "BroadcastReceiver - Unmute sound");
                audioDoManualUNMUTE(audio);

            }
            else //unplugged ->> MUTE
            {
                Log.e(TAG, "BroadcastReceiver - Mute sound");
                audioDoManualMUTE(audio);
            }
        }
    };

    private void audioDoManualMUTE(AudioManager audio){
        Log.e(TAG, "manual-audio > audioDoManualMUTE()");


        //audio.setStreamMute(AudioManager.STREAM_MUSIC, true);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){

            if (!audio.isStreamMute(AudioManager.STREAM_MUSIC)) {
                savedStreamMuted = true;
                audio.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_MUTE, 0);
            }
        }
        else {
            audio.setStreamMute(AudioManager.STREAM_MUSIC, true);
        }


        // Inform user
        Toast.makeText(HomeBaseActivity.this, LanguageMgm.getValue(LanguageKey.TEXT_HEADSET_NOTICE), Toast.LENGTH_SHORT).show();

    }


    private void audioDoManualUNMUTE(AudioManager audio){
        Log.e(TAG, "manual-audio > audioDoManualUNMUTE()");

        //audio.setStreamMute(AudioManager.STREAM_MUSIC, false);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
            if (savedStreamMuted) {
                audio.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_UNMUTE, 0);
                savedStreamMuted = false;
            }
        } else {
            audio.setStreamMute(AudioManager.STREAM_MUSIC, false);
        }
    }




In My Application:
 private static AudioManager am; 
...
 MyApp.am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

public static AudioManager getAudioManagerSingleton() {
        return MyApp.am;
    }
然后在欢迎活动中,我将所有设置为0: //将所有默认卷设置为0

MyApp.getAudioManagerSingleton().setStreamVolume(AudioManager.STREAM_MUSIC,         0,  AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
MyApp.getAudioManagerSingleton().setStreamVolume(AudioManager.STREAM_NOTIFICATION,  0,  AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
MyApp.getAudioManagerSingleton().setStreamVolume(AudioManager.STREAM_ALARM,         0,  AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
MyApp.getAudioManagerSingleton().setStreamVolume(AudioManager.STREAM_RING,          0,  AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
MyApp.getAudioManagerSingleton().setStreamVolume(AudioManager.STREAM_SYSTEM,        0,  AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
MyApp.getAudioManagerSingleton().setStreamVolume(AudioManager.STREAM_DTMF,          0,  AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);