`

手机通话控制

 
阅读更多

看到网络上的牛人对手机通话的控制,有感而发,希望搞个能在手机接到电话时可以给对方播放一段音频。看了下源码,发现如果仅仅通过 ITelephony.aidl的一些API似乎没有这个功能,难道要把这块的代码给扣出来进行修改吗,就是RIL.java那块。系统似乎没有给出这方 面的功能API啊。
    RIL.java
public void
    acceptCall (Message result) {
        RILRequest rr
                = RILRequest.obtain(RIL_REQUEST_ANSWER, result);
        if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
        send(rr);
    }

处理电话事件:
public void
        handleMessage(Message msg) {
            RILRequest rr = (RILRequest)(msg.obj);
            RILRequest req = null;
            switch (msg.what) {
                case EVENT_SEND:
                    /**
                     * mRequestMessagePending++ already happened for every
                     * EVENT_SEND, thus we must make sure
                     * mRequestMessagePending-- happens once and only once
                     */
                    boolean alreadySubtracted = false;
                    try {
                        LocalSocket s;
                        s = mSocket;
                        if (s == null) {
                            rr.onError(RADIO_NOT_AVAILABLE, null);
                            rr.release();
                            mRequestMessagesPending--;
                            alreadySubtracted = true;
                            return;
                        }
                        synchronized (mRequestsList) {
                            mRequestsList.add(rr);
                        }
                        mRequestMessagesPending--;
                        alreadySubtracted = true;
                        byte[] data;
                        data = rr.mp.marshall();
                        rr.mp.recycle();
                        rr.mp = null;
                        if (data.length > RIL_MAX_COMMAND_BYTES) {
                            throw new RuntimeException(
                                    "Parcel larger than max bytes allowed! "
                                                          + data.length);
                        }
                        // parcel length in big endian
                        dataLength[0] = dataLength[1] = 0;
                        dataLength[2] = (byte)((data.length >> 8) & 0xff);
                        dataLength[3] = (byte)((data.length) & 0xff);
                        //Log.v(LOG_TAG, "writing packet: " + data.length + " bytes");
                        s.getOutputStream().write(dataLength);
                        s.getOutputStream().write(data);
                    } catch (IOException ex) {
                        Log.e(LOG_TAG, "IOException", ex);
                        req = findAndRemoveRequestFromList(rr.mSerial);
                        // make sure this request has not already been handled,
                        // eg, if RILReceiver cleared the list.
                        if (req != null || !alreadySubtracted) {
                            rr.onError(RADIO_NOT_AVAILABLE, null);
                            rr.release();
                        }
                    } catch (RuntimeException exc) {
                        Log.e(LOG_TAG, "Uncaught exception ", exc);
                        req = findAndRemoveRequestFromList(rr.mSerial);
                        // make sure this request has not already been handled,
                        // eg, if RILReceiver cleared the list.
                        if (req != null || !alreadySubtracted) {
                            rr.onError(GENERIC_FAILURE, null);
                            rr.release();
                        }
                    }
                    if (!alreadySubtracted) {
                        mRequestMessagesPending--;
                    }
                    break;
                case EVENT_WAKE_LOCK_TIMEOUT:
                    // Haven't heard back from the last request.  Assume we're
                    // not getting a response and  release the wake lock.
                    // TODO should we clean up mRequestList and mRequestPending
                    synchronized (mWakeLock) {
                        if (mWakeLock.isHeld()) {
                            if (RILJ_LOGD) {
                                synchronized (mRequestsList) {
                                    int count = mRequestsList.size();
                                    Log.d(LOG_TAG, "WAKE_LOCK_TIMEOUT " +
                                        " mReqPending=" + mRequestMessagesPending +
                                        " mRequestList=" + count);
                                    for (int i = 0; i < count; i++) {
                                        rr = mRequestsList.get(i);
                                        Log.d(LOG_TAG, i + ": [" + rr.mSerial + "] " +
                                            requestToString(rr.mRequest));
                                    }
                                }
                            }
                            mWakeLock.release();
                        }
                    }
                    break;
            }
        }
    }

特附一个简单的demo,根据感应加速度可以接电话的代码,甩下就可以接电话,环境2.0.
有没搞过这块的,交流下。

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    彻底解决MTK手机 通话,外放音量 声音小的补丁 MTK手机修改手机音量

    首先,我们要理解MTK手机通话音量小的原因可能涉及到多个方面。这可能是由于硬件设计上的限制,比如扬声器功率不足或麦克风拾音效果不佳;也可能是软件层面的问题,如音频驱动程序不兼容或设置不当。此外,系统固件...

    Android 手机通话录音demo

    以下是对"Android 手机通话录音demo"的详细解析: 1. **权限管理**:首先,为了进行通话录音,你需要在AndroidManifest.xml文件中添加相应的权限声明。关键的两个权限是`RECORD_AUDIO`和`READ_PHONE_STATE`。`...

    可视电话和手机通过VoLTE呼叫,实现视频通话的测试方案

    (2)终端:用户手机必须支持VoLTE或5G,手机卡必须开通VoLTE或5G服务,且实际测试前还需在手机设置中启用“VoLTE高清通话”功能; (3)企业:线路接入设备由传统语音网关更换为支持video的vidisit的会话边界控制器...

    C++手机通话记录管理系统

    《C++手机通话记录管理系统详解》 在信息技术领域,C++是一种广泛应用的编程语言,以其高效、灵活性和面向对象的特性而备受青睐。本篇将深入探讨如何利用C++与SQL Server数据库技术来构建一个手机通话记录管理系统...

    地图信息定位 手机视频通话

    6. 音频处理:降噪、回声消除和自动增益控制等技术,提升通话质量。 7. 网络适应性:根据网络状况动态调整视频分辨率和帧率,保证在不同网络环境下的流畅体验。 在GIS(地理信息系统)领域,地图信息定位技术与...

    课程设计:手机通话计时器设计

    在本课程设计中,我们关注的是“手机通话计时器”的设计,这是一项结合了数字电子(数电)和模拟电子(模电)知识的实践项目。计时器需具备暂停、继续、停止以及清零等功能,并且在设计中使用了Multisim软件进行仿真...

    通过蓝牙获取配对的手机上的通话记录-以及通讯录

    HSP允许蓝牙设备作为耳机或扬声器,接收来自手机的音频流,同时提供基本的控制功能,如挂断和接听电话。虽然HSP主要关注音频传输,某些高级设备可以通过扩展实现通话记录的访问,但通常这并不常见,因为通话记录涉及...

    安卓手机通话录音软件

    本文将详细探讨两个安卓手机通话录音软件:太阳通话录音(taiyangtonghualuyin) V1.2_mumayi_1569c 和 SunUltimate V1.2.1。 首先,我们来看“太阳通话录音”应用。该软件的版本号为V1.2,由mumayi开发者团队提供,...

    电信设备-通话控制方法、装置及存储介质和移动终端.zip

    《电信设备-通话控制方法、装置及存储介质和移动终端》这一资料主要涵盖了现代通信技术中的关键要素,包括通话控制、设备实现、存储方案以及移动终端应用。在深入理解这一主题之前,我们需要先对以下几个核心概念...

    电信设备-通话控制方法、移动终端及计算机可读存储介质.zip

    《电信设备-通话控制方法、移动终端及计算机可读存储介质》这个压缩包文件主要涵盖了通信领域中的核心技术,包括通话控制、移动设备的功能实现以及计算机可读存储介质的应用。以下是对这些主题的详细阐述: 一、...

    手机通话时如何录音参考.pdf

    总的来说,这些内容涵盖了手机通话录音的基本操作和手机作为Modem拨号上网的技术实现,对于那些需要这些功能的用户来说,提供了实用的操作指南。无论是为了记录重要通话还是在没有固定网络的情况下实现移动上网,...

    模拟手机通话管理系统(MFC、SQL Server)

    《模拟手机通话管理系统:MFC与SQL Server的深度结合》 在信息技术日益发达的今天,模拟手机通话管理系统作为通信技术与计算机科学的结合体,扮演着至关重要的角色。本项目运用了Microsoft Foundation Classes (MFC...

    基于Android平台下的通话录音软件,帮助用户轻松实现通话录音和留言录音

    MediaRecorder类的静态方法`createFromPath()`可以用来创建MediaPlayer实例,然后通过start()和stop()方法控制播放。 5. **界面设计与交互**: 为了提供良好的用户体验,应用应包含清晰的录音、暂停、停止、回放和...

    手机蓝牙远程控制程序

    在移动通信技术日新月异的今天,手机已经不再仅仅是通话工具,而是成为了日常生活、工作中的多功能助手。尤其是在办公领域,利用手机进行远程控制电脑的功能逐渐受到人们的青睐。诺基亚作为曾经的手机巨头,在这方面...

    2018手机远程控制+教程

    在2018年的技术环境下,手机远程控制已经成为一种实用且必要的技能,尤其对于需要跨设备操作或远程协助的人来说。本教程将详细讲解如何实现手机的远程控制,并提供了一个具体的安卓手机远程控制方案。 首先,我们...

    电信设备-无线移动终端的可拆卸式用户识别卡和通话控制方法.zip

    《电信设备:无线移动终端的可拆卸式用户识别卡和通话控制方法》 在现代通信技术中,无线移动终端,如智能手机和平板电脑,已经成为我们日常生活和工作中不可或缺的一部分。这些设备的核心部分之一就是用户识别卡...

    手机QQ群通话成员发言权限怎么设置.docx

    5. 当群通话建立起来后,屏幕上方会出现通话的相关控制选项。找到并点击“发言管理”按钮,这通常是显示为一个麦克风图案的图标。 6. 进入发言管理界面,你会看到所有参与群通话的成员列表。每个成员的右侧会有一个...

    手机通话录音器(4.4之前版本)

    本话题将详细探讨“手机通话录音器”这一应用在4.4之前版本的功能、使用方法以及相关技术知识。 首先,我们要理解的是录音机应用的基本原理。录音机应用通常利用手机的麦克风捕捉声音信号,并将其转化为数字音频...

    手机控制电脑 电脑端

    7. **功能特性**:除了基本的屏幕镜像和控制外,高级功能可能包括文件传输、语音或视频通话、多用户同时访问等。 8. **设置与配置**:在电脑端,用户需要按照软件提供的指南安装并配置服务器组件,可能包括设置访问...

Global site tag (gtag.js) - Google Analytics