Определение, подключена ли гарнитура к устройству Android или нет. - PullRequest
28 голосов
/ 06 июня 2011

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

Ответы [ 4 ]

44 голосов
/ 16 июня 2011

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

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

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

Но это не работает. Когда ОС отправляет это намерение «HEADSET_PLUG», ОС устанавливает флаг «Intent.FLAG_RECEIVER_Rurable_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);
    }
}
29 голосов
/ 06 июня 2011

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

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

15 голосов
/ 26 октября 2012

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

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

4 голосов
/ 06 июня 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...