如何在 Android Pie 及更高版本中以编程方式打开和关闭设备扬声器

2024-03-19

与这个问题以及几年前的许多其他问题相同:如何在 android 4.0 中以编程方式打开/关闭扬声器 https://stackoverflow.com/questions/12036221/how-to-turn-speaker-on-off-programmatically-in-android-4-0

Android 似乎改变了处理这个问题的方式。

以下是我尝试以编程方式拨打电话以使用扬声器的方法。这些解决方案在 Android Pie 上都不适合我。 虽然它们似乎在 Android Nougat 和 Oreo 上运行良好

解决方案1。

final static int FOR_MEDIA = 1;
final static int FORCE_NONE = 0;
final static int FORCE_SPEAKER = 1;

Class audioSystemClass = Class.forName("android.media.AudioSystem");
Method setForceUse = audioSystemClass.getMethod("setForceUse", int.class, int.class);
setForceUse.invoke(null, FOR_MEDIA, FORCE_SPEAKER);

2.

AudioManager audioManager = (AudioManager)getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
if (audioManager != null) {
   audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
   audioManager.setSpeakerphoneOn(true);

3.

AudioManager audioManager = (AudioManager)getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
if (audioManager != null) {
   audioManager.setMode(AudioManager.MODE_IN_CALL);
   audioManager.setSpeakerphoneOn(true);

4.

Thread thread = new Thread() {
    @Override
    public void run() {
        try {
            while(true) {
                sleep(1000);
                audioManager.setMode(AudioManager.MODE_IN_CALL);
                if (!audioManager.isSpeakerphoneOn())
                    audioManager.setSpeakerphoneOn(true);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
};
thread.start();

该应用程序已授予以下权限:

<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />

我还尝试了以下仅用于拨出呼叫的解决方案。而且它也不起作用。

Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.putExtra("speaker", true);
callIntent.setData(Uri.parse("tel:" + number));
context.startActivity(callIntent);

在 Android Pie 中,我也遇到了同样的问题。我用一个解决了它通话服务 https://developer.android.com/reference/android/telecom/InCallService with

setAudioRoute(ROUTE_SPEAKER)

您的应用程序需要是默认手机应用程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Android Pie 及更高版本中以编程方式打开和关闭设备扬声器 的相关文章

随机推荐