Подтвердить что ты не робот

Обнаружение подключения минигарнитуры к устройству Android или нет.

Как определить, подключена ли гарнитура к устройству Android или нет?

4b9b3361

Ответ 1

Когда вы говорите "гарнитура", вы имеете в виду "проводную гарнитуру"? Если это так, есть намерение определить, подключен или отключен один из них: ACTION_HEADSET_PLUG.

Чтобы проверить статус, вы можете использовать AudioManager.isWiredHeadsetOn(), хотя это может вернуть значение false, если есть также Bluetooth-гарнитура, и вместо этого звук направляется на него.

Ответ 2

Вы можете использовать широковещательный приемник.

Итак, вы можете написать этот код в "AndroidManifest.xml"

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

Но это не работает. Когда OS отправляет это намерение "HEADSET_PLUG", OS устанавливает флаг "Intent.FLAG_RECEIVER_REGISTERED_ONLY". Итак, вы должны написать код, как показано ниже, в классе Activity или Service вместо "AndroidManifest".

public class BRHeadsetActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    IntentFilter receiverFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
    HeadsetStateReceiver receiver = new HeadsetStateReceiver();
    registerReceiver( receiver, receiverFilter );


}

Я надеюсь, что эта статья поможет вам. Bye!

Это часть "HeadsetObserver.java", Android SDK Source.

private final void sendIntent(int headset, int headsetState, int prevHeadsetState, String headsetName) {
    if ((headsetState & headset) != (prevHeadsetState & headset)) {
        //  Pack up the values and broadcast them to everyone
        Intent intent = new Intent(Intent.ACTION_HEADSET_PLUG);

        **intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);**

        int state = 0;
        int microphone = 0;

        if ((headset & HEADSETS_WITH_MIC) != 0) {
            microphone = 1;
        }
        if ((headsetState & headset) != 0) {
            state = 1;
        }
        intent.putExtra("state", state);
        intent.putExtra("name", headsetName);
        intent.putExtra("microphone", microphone);

        if (LOG) Slog.v(TAG, "Intent.ACTION_HEADSET_PLUG: state: "+state+" name: "+headsetName+" mic: "+microphone);
        // TODO: Should we require a permission?
        ActivityManagerNative.broadcastStickyIntent(intent, null);
    }
}

Ответ 3

AudioManager.isWiredHeadsetOn() всегда возвращает false, потому что для этого требуется разрешение пользователя MODIFY_AUDIO_SETTINGS.

Я провел несколько дней, пока нашел ответ. Об этом в официальной документации нет. И этот bug уже зарегистрирован в BugTracker.

Ответ 5

Сначала создайте приемник в своем манифесте:

    <receiver android:name="com.yourapplication.BroadcastReceiver">
        <intent-filter>
            <action android:name="android.intent.action.HEADSET_PLUG"/>
        </intent-filter>
    </receiver>

не забудьте изменить приложение com.yourapplication в соответствии с названием вашего проекта

Создайте две переменные в заголовке своей деятельности:

private  BroadcastReceiver mReceiver  ;
boolean Microphone_Plugged_in = false;

Определите свой получатель внутри onCreate вашей деятельности:

        mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            final String action = intent.getAction();
            int iii=2;
            if (Intent.ACTION_HEADSET_PLUG.equals(action)) {
                iii=intent.getIntExtra("state", -1);
                if(Integer.valueOf(iii)==0){
                    Microphone_Plugged_in = false;
                    Toast.makeText(getApplicationContext(),"microphone not plugged in",Toast.LENGTH_LONG).show();
                }if(Integer.valueOf(iii)==1){
                    Microphone_Plugged_in = true;
                    Toast.makeText(getApplicationContext(),"microphone plugged in",Toast.LENGTH_LONG).show();
                }
            }
        }};
        IntentFilter receiverFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
        registerReceiver( mReceiver, receiverFilter );

добавить onResume и onStope:

@Override
  protected void onResume() {
    super.onResume();
    IntentFilter filter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
    getApplicationContext().registerReceiver(mReceiver, filter);
}

@Override
protected void onStop() {
    super.onStop();
    getApplicationContext().unregisterReceiver(mReceiver);
}