Wykrywanie, czy zestaw słuchawkowy jest podłączony do urządzenia z systemem Android, czy nie.

Jak Mogę określić, czy zestaw słuchawkowy jest podłączony do urządzenia z Androidem, czy nie?

Author: gonzobrains, 2011-06-06

4 answers

Kiedy mówisz "zestaw słuchawkowy", masz na myśli "przewodowy zestaw słuchawkowy"? Jeśli tak, istnieje zamiar wykrycia, czy jeden jest podłączony lub odłączony: ACTION_HEADSET_PLUG.

Aby sprawdzić status, możesz użyć AudioManager.isWiredHeadsetOn(), chociaż może to zwrócić wartość false, jeśli istnieje również zestaw słuchawkowy bluetooth, a dźwięk jest kierowany do niego.

 28
Author: EboMike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-04 10:17:13

Możesz użyć odbiornika.

Możesz więc napisać ten kod w " AndroidManifest.xml "
<receiver android:name="com.juno.brheadset.HeadsetStateReceiver">
    <intent-filter>
        <action android:name="android.intent.action.HEADSET_PLUG"/>
    </intent-filter>
</receiver>-->
Ale to nie działa. Gdy system operacyjny wysyła tę intencję "HEADSET_PLUG", system operacyjny ustawia flagę " Intent.FLAG_RECEIVER_REGISTERED_ONLY "powinieneś więc napisać kod jak poniżej w Activity lub Service class zamiast" AndroidManifest " rzeczy.
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 );


}
Mam nadzieję, że ten artykuł ci pomoże. Pa!

To jest część " 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);
    }
}
 42
Author: cmcromance,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-16 01:39:11

AudioManager.isWiredHeadsetOn() zawsze zwracaj false, ponieważ wymaga uprawnień użytkownika MODIFY_AUDIO_SETTINGS.

Spędziłem kilka dni, szukając odpowiedzi. Nie ma na ten temat żadnych informacji w oficjalnej dokumentacji. I to bug już zarejestrowane w BugTracker.
 15
Author: user1777060,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-26 12:52:51
 4
Author: Ravi Vyas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-06 07:52:14