Java Android audioReceiver广播接收器(Android操作系统错误)

Java Android audioReceiver广播接收器(Android操作系统错误),java,android,debugging,google-api,broadcastreceiver,Java,Android,Debugging,Google Api,Broadcastreceiver,我试图创建一个音频接收器广播。允许我的用户仅在耳机插入插件时收听音乐 代码如下: private BroadcastReceiver audioReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { AudioManager audio = (AudioManager) getSystemService(Context.A

我试图创建一个音频接收器广播。允许我的用户仅在耳机插入插件时收听音乐

代码如下:

private BroadcastReceiver audioReceiver  = new BroadcastReceiver()
{   @Override
    public void onReceive(Context context, Intent intent)
    {   AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        headsetIsPluggedIn = (intent.getExtras().getInt("state")==1); 
        if(headsetIsPluggedIn) //plugged
        {   Log.d("", "BroadcastReceiver - Unmute sound");
            audio.setStreamMute(AudioManager.STREAM_MUSIC, false);
        }
        else //unplugged
        {   Log.d("", "BroadcastReceiver - Mute sound");
            audio.setStreamMute(AudioManager.STREAM_MUSIC, true);

            // Inform user
            Toast.makeText(DuplicatedPlayerActivity.this, "Please plug in your headset to enjoy the sound.", Toast.LENGTH_SHORT).show();
        }
    }
};



@Override
public void onResume() {
    super.onResume();

    if (HEADSET_ONLY) { registerReceiver(audioReceiver, new IntentFilter(Intent.ACTION_HEADSET_PLUG)); }
显示

<receiver android:name="com.juno.brheadset.HeadsetStateReceiver">
    <intent-filter>
        <action android:name="android.intent.action.HEADSET_PLUG"/>
    </intent-filter>
</receiver>

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

好的,这是有趣的部分。如果重新启动设备,请运行我的应用程序。此功能将不起作用

如果您至少将耳机插孔插入手机一次!退出我的应用程序,重新启动应用程序。该功能将正常工作,直到用户重新启动手机


现在,为什么只有当用户将插孔插入手机时,此功能才起作用?

“现在,为什么只有当用户将插孔插入手机时,此功能才起作用?”-->因为您已经在“android.intent.action.HEADSET\u PLUG”操作的接收器中编写了代码。您的代码仅在接收耳机插头广播时执行。

或者,如何模拟耳机插件的输入和输出?您只能在应用程序中执行此操作。即使在其他音乐播放器中也要这样做,这需要付出很大的努力。若你们想让它在你们的应用程序中工作,只需检查耳机是否插好,并根据这个问题播放或不播放。如果我回答正确,请向上投票。您可以从命令行发送假广播以模拟耳机插头。您可以使用:adb shell am broadcast-a android.intent.action.headset_插头从命令行发送假广播。