BroadcastReceiverクラスを継承したクラスを作って、onReceiveでACTION_HEADSET_PLUG、ACTION_AUDIO_BECOMING_NOISYを取ってやる。
ACTION_HEADSET_PLUGは、ヘッドホンが刺さったり抜けたりしたときに受信する。ACTION_AUDIO_BECOMING_NOISYはヘッドホンが抜けてスピーカーから大きな音がなるよってときに受信する。Bluetoothオーディオが切断されたときもACTION_AUDIO_BECOMING_NOISYを受信する。

public class MainActivity extends AppCompatActivity {
    /**
     * ヘッドセット状態取得レシーバクラス
     */
    private class HeadSetPlugReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if(action.equals(Intent.ACTION_HEADSET_PLUG)) {
                int state = intent.getIntExtra("state", -1);
                if(state == 0) { // ヘッドホンが抜けた
                    System.out.println("ヘッドホンが抜けた(ACTION_HEADSET_PLUG)");
                }
            } else if(action.equals(AudioManager.ACTION_AUDIO_BECOMING_NOISY)) {
                System.out.println("ヘッドホンが抜けた(ACTION_AUDIO_BECOMING_NOISY)");
            }
        }
    }

    private HeadSetPlugReceiver headSetPlugReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // ヘッドセット状態を監視
        headSetPlugReceiver = new HeadSetPlugReceiver();
        registerReceiver(headSetPlugReceiver, new IntentFilter(Intent.ACTION_HEADSET_PLUG));
        registerReceiver(headSetPlugReceiver, new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY));
    }
}