我正在开发一个应用程序,其中我想生成一个语音文件,即每次在拨出呼叫时使用文本到语音的书面文本。我能够检测到接收方何时使用辅助功能服务应答呼叫。这是代码: -
public class CallDetection extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED) {
Log.i("myaccess", "in window changed");
AccessibilityNodeInfo info = event.getSource();
if (info != null && info.getText() != null) {
String duration = info.getText().toString();
String zeroSeconds = String.format("%02d:%02d", new Object[]{Integer.valueOf(0), Integer.valueOf(0)});
String firstSecond = String.format("%02d:%02d", new Object[]{Integer.valueOf(0), Integer.valueOf(1)});
Log.d("myaccess", "after calculation - " + zeroSeconds + " --- " + firstSecond + " --- " + duration);
if (zeroSeconds.equals(duration) || firstSecond.equals(duration)) {
Toast.makeText(getApplicationContext(), "Call answered", Toast.LENGTH_SHORT).show();
// Your Code goes here
}
info.recycle();
}
}
}
@Override
protected void onServiceConnected() {
super.onServiceConnected();
Toast.makeText(this, "Service connected", Toast.LENGTH_SHORT).show();
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.eventTypes = AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
info.notificationTimeout = 0;
info.packageNames = null;
setServiceInfo(info);
}
@Override
public void onInterrupt() {
}
}
现在,我正在使用文本到语音来播放语音但这在这里不起作用。我既不能在服务中使用它,也不能在另一部手机上使用任何语音。我搜索并发现android不允许应用程序在通话期间发送语音。真的吗?帮助我解决这个问题。
答案 0 :(得分:3)
你发现的是绝对正确的。由于安全问题,Android API不允许直接访问语音输入。因此无法实现您在普通设备中尝试执行的操作。
我们想到的另一种可能性是在通话过程中播放音频片段。请参阅official docs关于在通话过程中使用媒体播放器的报价
您只能将音频数据播放到标准输出 设备。目前,那是移动设备扬声器或蓝牙 耳机。您无法在对话音频期间播放声音文件 一个电话。
唯一的跳跃是自定义操作系统/硬件,它将提供的音频作为普通设备中的麦克风输入。