代码之家  ›  专栏  ›  技术社区  ›  Raj

在安卓系统中接听电话时,请说出录音文本

  •  1
  • Raj  · 技术社区  · 8 年前

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

    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 回复  |  直到 8 年前
        1
  •  3
  •   Bertram Gilfoyle    8 年前

    你的发现完全正确。出于安全考虑,Android API不允许直接访问语音输入。所以 不可能 以实现您在普通设备中尝试的功能。

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

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

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