查看: 299|回复: 0

[ROM相关] 借用高手编写的程序,ROM大神们看看吧,能不能加到SUDA里面

[复制链接]
发表于 2016-4-10 17:33:35 | 显示全部楼层 |阅读模式
以下为安卓开发网上的帖子:

来电自动录音的程序,ROM大神给加到SUDA里面吧,谢谢。


       我们在使用Android手机打电话时,有时可能会需要对来去电通话自动录音,本文就详细讲解实现Android来去电通话自动录音的方法,大家按照文中的方法编写程序就可以完成此功能。
       来去电自动录音的关键在于如何监听手机电话状态的转变:
       1)来电的状态的转换如下(红色标记是我们要用到的状态)
       空闲(IDEL)——> 响铃(RINGING)——> 接听(ACTIVE)——> 挂断(经历DISCONNECTING——DISCONNECTED)——> 空闲(IDEL)
       或者  空闲(IDEL)——> 响铃(RINGING)——> 拒接 ——> 空闲(IDEL)
       2)去电状态的转换如下
       空闲(IDEL)——> 拨号 (DIALING)——> (对方)响铃(ALERTING) ——> 建立连接(ACTIVE)—— 挂断(经历DISCONNECTING——DISCONNECTED)——> 空闲(IDEL)
       或者 空闲(IDEL)——> 拨号 (DIALING)——> (对方)响铃(ALERTING)——> 挂断/对方拒接 ——> 空闲(IDEL)
       1、先进行来电的分析和实现。
       相对去电来说,来电状态的转换检测要简单些。android api 中的PhoneStateListener 类提供了相应的方法,但我们需要覆盖其中的 onCallStateChanged(int state, String incomingNumber) 方法即可实现来电状态的检测,并在此基础上添加录音功能即可。其中 state 参数就是各种电话状态,到时我们将它跟下面我们要用到的状态进行比较,若是电话处在我们想要的状态上,则进行一系列操作,否则就不管他。想要获取这些状态,还需要另一个电话相关类,那就是 TelephonyManager, 该类 提供了一些电话状态,其中我们要用到的是:TelephonyManager.CALL_STATE_IDLE(空闲)、TelephonyManager.CALL_STATE_OFFHOOK(摘机)和 TelephonyManager.CALL_STATE_RINGING(来电响铃)这三个状态。判别这三种状态,可以继承 android.telephony.PhoneStateListener 类,实现上面提到的 onCallStateChanged(int state, String incomingNumber) 方法,请看如下代码:

Java代码
public class TelListener extends PhoneStateListener {     

    @Override     
    public void onCallStateChanged(int state, String incomingNumber) {     
        super.onCallStateChanged(state, incomingNumber);     

        switch (state) {     
        case TelephonyManager.CALL_STATE_IDLE: // 空闲状态,即无来电也无去电     
            Log.i("TelephoneState", "IDLE");     
            //此处添加一系列功能代码   
            break;     
        case TelephonyManager.CALL_STATE_RINGING: // 来电响铃     
            Log.i("TelephoneState", "RINGING");     
            //此处添加一系列功能代码   
            break;     
        case TelephonyManager.CALL_STATE_OFFHOOK: // 摘机,即接通   
            Log.i("TelephoneState", "OFFHOOK");     
            //此处添加一系列功能代码   
            break;     
        }     

        Log.i("TelephoneState", String.valueOf(incomingNumber));     
    }     

}  
       有了以上来电状态监听代码还不足以实现监听功能,还需要在我们的一个Activity或者Service中实现监听,方法很简单,代码如下:

Java代码
/**   
* 在activity 或者 service中加入如下代码,以实现来电状态监听   
*/   
TelephonyManager telMgr = (TelephonyManager)context.getSystemService(   
                Context.TELEPHONY_SERVICE);   
        telMgr.listen(new TelListener(), PhoneStateListener.LISTEN_CALL_STATE);   
       这样就实现了来电状态监听功能,但要能够在设备中跑起来,这还不够,它还需要两个获取手机电话状态的权限:

XML/HTML代码
<uses-permission android:name="android.permission.READ_PHONE_STATE" />   
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />   
       这样的话就可以跑起来了。

       说到这,我想如果你可以实现录音功能的话,在此基础上实现来电自动录音就应该没什么问题了,不过请容我简单罗嗦几句。既然是来电,那么要想录音的话,那么应该就是在监听到 TelephonyManager.CALL_STATE_OFFHOOK 的状态时开启录音机开始录音, 在监听到TelephonyManager.CALL_STATE_IDLE 的状态时关闭录音机停止录音。这样,来电录音功能就完成了,不要忘记录音功能同样需要权限:

XML/HTML代码
<uses-permission android:name="android.permission.RECORD_AUDIO"/>     

<!-- 要存储文件或者创建文件夹的话还需要以下两个权限 -->     
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>     
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号
关于盛悦|手机版|小黑屋|盛悦网

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|粤ICP备12017825号

在本版发帖
关注公众号
QQ客服返回顶部