MobileMon
MobileMon

Reputation: 8651

Check if Android device has an internal speaker

How to check if a device running Android has a speaker on it or not? Meaning is it able to play audio?

Are there any Configuration qualifiers for it? and what about programmatically

EDIT: just bought an Android Wear watch and it does NOT have a speaker so not sure how I would check this

Upvotes: 4

Views: 3010

Answers (3)

Tankery
Tankery

Reputation: 113

Since API level 21 (most Android Wear based on this level), Android provide a feature, PackageManager.FEATURE_AUDIO_OUTPUT, witch can be used to detect whether there is a way to output the audio.

I tested this feature on my MOTO 360 (no speaker), it don't has this feature, and Ticwatch (with speaker) do have this feature.

But when I connected a Bluetooth headset to the MOTO 360, it still don't have this feature, this confused me.

So I use AudioManager.isBluetoothA2dpOn() for further check.

The detection code can be like this:

public boolean hasAudioOutput() {
    AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    PackageManager packageManager = getPackageManager();

    if (audioManager.isBluetoothA2dpOn()) {
        // Adjust output for Bluetooth.
        return true;
    } else if (audioManager.isBluetoothScoOn()) {
        // Adjust output for Bluetooth of sco.
        return true;
    } else if (audioManager.isWiredHeadsetOn()) {
        // Adjust output for headsets
        return true;
    } else if (audioManager.isSpeakerphoneOn()) {
        // Adjust output for Speakerphone.
        return true;
    } else if (packageManager.hasSystemFeature(PackageManager.FEATURE_AUDIO_OUTPUT)) {
        // Has internal speaker or other form of audio output.
        return true;
    } else {
        // No device for audio output.
        return false;
    }
}

Upvotes: 3

Sahil
Sahil

Reputation: 54

Android API doesn't have any such qualifiers neither there is any library method.

But just a raw idea, try playing some audio and simultaneously record through the mic. Check if they are same. This is not a fool proof way, but just a thought!

Upvotes: 2

Imperfectluck
Imperfectluck

Reputation: 1

Probably most android phones have a speaker i guess :P /.. But if you are asking if you can check whether its connected to a speaker or headphones or something like that..then you can use

if (isBluetoothA2dpOn()) {
    // Adjust output for Bluetooth.
} else if (isSpeakerphoneOn()) {
    // Adjust output for Speakerphone.
} else if (isWiredHeadsetOn()) {
    // Adjust output for headsets
} else { 
    // If audio plays and noone can hear it, is it still playing?
}

SOURCE: http://developer.android.com/training/managing-audio/audio-output.html#CheckHardware

Upvotes: 0

Related Questions