在Android中收到呼叫时说出录制的文本

时间:2018-05-19 20:16:28

标签: android text-to-speech telephonymanager accessibilityservice

我正在开发一个应用程序,其中我想生成一个语音文件,即每次在拨出呼叫时使用文本到语音的书面文本。我能够检测到接收方何时使用辅助功能服务应答呼叫。这是代码: -

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不允许应用程序在通话期间发送语音。真的吗?帮助我解决这个问题。

1 个答案:

答案 0 :(得分:3)

你发现的是绝对正确的。由于安全问题,Android API不允许直接访问语音输入。因此无法实现您在普通设备中尝试执行的操作。

我们想到的另一种可能性是在通话过程中播放音频片段。请参阅official docs关于在通话过程中使用媒体播放器的报价

  

您只能将音频数据播放到标准输出   设备。目前,那是移动设备扬声器或蓝牙   耳机。您无法在对话音频期间播放声音文件   一个电话。

唯一的跳跃是自定义操作系统/硬件,它将提供的音频作为普通设备中的麦克风输入。