【发布时间】:2019-06-03 11:56:08
【问题描述】:
与这个问题以及几年前的许多其他问题相同: 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);
【问题讨论】:
-
你是怎么解决这个问题的?
-
M 在 oreo nd up 上面临同样的问题
-
问题尚未解决。
-
我有更多信息。在Android Pie中,该应用程序需要一个额外的权限,MODIFY_AUDIO_ROUTING,据我所知,这只能授予系统应用程序。如果您拥有此权限,解决方案 1 应该可以工作。 ndroidaudiotes:访问隐藏方法 Landroid/media/AudioSystem;->setForceUse(II)I(浅灰名单,反射)权限失败:android.permission.MODIFY_AUDIO_ROUTING from uid=10296 pid=26584
-
CALL_LOG 不能在 Android 9 中使用。
标签: android