`

手机通话控制

阅读更多

看到网络上的牛人对手机通话的控制,有感而发,希望搞个能在手机接到电话时可以给对方播放一段音频。看了下源码,发现如果仅仅通过 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.
有没搞过这块的,交流下。

分享到:
评论
发表评论

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

相关推荐

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

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

    安桌手机音量控制软件

    安桌手机音量控制软件(Audio Control Pro)是一款制作相当精良且功能强大的音量控制应用程序,拥有多种尺寸的窗口小部件,还具有四种自定义铃声音量的情景模式。不单止可以自定义个性化的例外规则情景模式,还可以...

    GSM功率控制文档

    可以明显感觉到手机电池的利用时间 感觉到通话质量的好坏 2、功率控制从网络指标来说: 功率控制可以减少网络的内部干扰 从下行来说: 主要是频率资源不够引起的带内下行干扰 从上行来说: 主要是由于高话务量...

    通话自动录音

    ◆ 软件功能: ◆ - 自动或手动记录电话; ◆ - 轻松制作语音备忘录; ◆ - 直观的命名剪辑,其中包括电话号码或联系人姓名; ◆ - 支持桌面部件,能够一键...◆ - 支持通过短信远程控制录音; ◆ - 支持多种音频格式;

    python 实现手机自动拨打电话的方法(通话压力测试)

    今天说下用python结合adb命令去实现安卓手机端的通话压力测试。 #操作前先在设置里打开power键可以结束通话按钮,否则会导致代码报错 from time import sleep import os def test_call(number1,number2,number3,...

    通话双向录音汉化版Call Recorder v2.0.24

    Call Recorder-Total Recall是一款对手机通话进行双向录音的应用。这是一款功能强大而实用的通话辅助工具,它不仅是一个强大的呼叫记录软件,还能够进行简单的语音记录。通过Call Recorder-Total Recall,你能够记录...

    手机串口 at 指令集

    例如,用AT+CMGS命令发送短消息时,如果此时正好手机处于振铃或通话状态,就会返回一个"+CMS ERROR"。所以,应当在发送命令后,检测手机的响应,失败后重发。而且,因为只有一个通信端口,发送和接收不可能同时进行...

    智能手机作文.docx

    有了手机通话变得越来越方便,世界变得越来越小;有了手机你在哪里别人都可以找到你,与你通话;有了手机你不用坐在家里等别人的电话,在外面照样交流。手机让我们的联系更简单,通话更方便,我们的交流需要也得到了更...

    WCDMA手机测试简介

    测试WCDMA手机 的 开环功率控制 测试手机的开环功率 根据34.121 / 5.5.2 Transmit On/Off Timemask 要测试哪个RACH前导? 规范定义要测试第一个RACH接入试探前导的 “开”功率 “关”功率在第二个接入试探前导之前和...

    智能手机的三种泄密方式.docx

    通过这些方法,全面控制智能手机,在需要时锁定用户,进行后台操纵实时监听用户通话,或通过网络将通话内容上传到智能手机的三种泄密方式全文共4页,当前为第3页。智能手机的三种泄密方式全文共4页,当前为第3页。...

    Android例子源码接打电话录音小例子.zip

    本项目是一个通话录音的例子源码,可以手动控制在接听或拨打电话的时候进行录音操作,(不过我在2.3.7的miui上测试没有效果,不知道是360作梗还是miui自身问题),没有测试4.0以上效果,需要的请自测,在项目编译...

    Android VoIP语音及视频通话源代码.rar

     由于是开源软件,需要版本控制的服务器,可以安装Subclipse(可以参见官网)  这样就可以将工程import到eclipse中了。  整理一些Android视频通话技术开发的资料:  SipDroid是一款开源的SIP/Voip客户端软件,...

    手机话费管理系统(c语言编写)

    该系统由C语言编写, 有软件工程报告及系统代码,

    手机充值消费软件需求规格说明书.doc

    1 Introduction 简介 1.1 Purpose 目的 编写此文档的目的是进一步定制软件开发的细节问题,希望能使... 手机充值功能基本包括:电话用户开户操作、电话用户综合操作、手机话费充值、查询消费历史话费和模拟通话模拟扣费

    可视手机方案设计.doc

    CCD时序发生器电路 中图分类号:TP391.41 文献标识码:A 文章编号:1671-7597(2012)0220075-01 1 可视手机系统 可视手机是指在普通手机功能的基础上,使通话双方能够看到对方活动图像的 通信方式。其通信过程既...

    移动神盾 PocketLock PPC加密工具

    在控制端的手机上编写短信“+密码+8”发送给被盗手机,可删除被盗手机的所有联系人号码。 二、加密WM6.5文件和文件夹:用PocketLock工具 01 加密文件。启动PocketLock,点击“文件加密”,在浏览器中选择需加密的...

    Android项目源码全功能语音视频通话客户端Imsdroid.zip

    开源视频会议服务器,用于管理多点控制单元(MCU),每个MCU可以处理多达64人参与 5、Flash2IMS 使用Adobe Flash 的SIP/ IMS网关 支持功能 1、SIP ( RFC 3261 3GPP TS 24.229 REL- 9 ) 2、 IPv4 IPv6 TCP UDP...

    Android编程基于距离传感器控制手机屏幕熄灭的方法详解

    本文实例讲述了Android编程基于距离传感器控制手机屏幕熄灭的方法。分享给大家供大家参考,具体如下: 在现实生活中,打电话的时候手机挨着自己的头,屏幕会熄灭,这是为了不让自己的头按到什么手机键~ 这个功能可以...

    Android开发实验---通讯录.docx

    查看详细时显示手机号码、群组、和设定的手机铃声以及同该联系人的通话记录。 (4)在联系人界面,可以查看各群组。点击群组,跳出对应联系人。 (5)有拨号键盘,点击数字将号码显示出来,并可以对手机号码进行删减...

Global site tag (gtag.js) - Google Analytics