Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在安卓系统中接收到呼叫时说录音文本_Android_Text To Speech_Telephonymanager_Accessibilityservice - Fatal编程技术网

Android 在安卓系统中接收到呼叫时说录音文本

Android 在安卓系统中接收到呼叫时说录音文本,android,text-to-speech,telephonymanager,accessibilityservice,Android,Text To Speech,Telephonymanager,Accessibilityservice,我正在开发一个应用程序,我想在其中生成一个语音文件,即每次拨出电话时使用文本到语音的书面文本。我能够检测到接收者何时使用无障碍服务接听电话。代码如下:- public class CallDetection extends AccessibilityService { @Override public void onAccessibilityEvent(AccessibilityEvent event) { if (event.getEventType() == Accessibili

我正在开发一个应用程序,我想在其中生成一个语音文件,即每次拨出电话时使用文本到语音的书面文本。我能够检测到接收者何时使用无障碍服务接听电话。代码如下:-

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

你的发现绝对正确。由于安全问题,Android API不允许直接访问语音输入。因此,没有办法实现您在普通设备中尝试的功能

我们想到的另一种可能性是在通话中使用播放音频剪辑。请参阅“关于在通话中使用媒体播放器”中的这句话

您只能将音频数据播放到标准输出 装置。目前,这是移动设备扬声器或蓝牙 头戴式耳机。您不能在对话音频中播放声音文件 电话

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