下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android中怎么实现电话拦截和电话录音功能
使用BordercastReceiver和Service组件实现下述功能:当拨打电话或电话状态发生改变时,系统就会发出有序广播,因此我们可以使用BordercastReceiver接受广播,因BordercastReceiver执行时间短不能执行耗时任务也不能使用子线程,因此我们应启动一个Service来监听电话并进行处理二、加入AIDL文件AndroidStudio会自动编译产生对应的类文件三、编写TelReceiver组件public
class
TelReceiver
extends
BroadcastReceiver
{
public
TelReceiver()
{
}
@Override
public
void
onReceive(Context
context,
Intent
intent)
{
Intent
i=new
Intent(context,ListenPhoneService.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setAction(intent.getAction());
i.putExtra(TelephonyManager.EXTRA_INCOMING_NUMBER,
intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER));//电话号码
i.putExtra(TelephonyManager.EXTRA_STATE,
intent.getStringExtra(TelephonyManager.EXTRA_STATE));//电话状态
context.startService(i);//启动服务
}
}public
class
TelReceiver
extends
BroadcastReceiver
{
public
TelReceiver()
{
}
@Override
public
void
onReceive(Context
context,
Intent
intent)
{
Intent
i=new
Intent(context,ListenPhoneService.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setAction(intent.getAction());
i.putExtra(TelephonyManager.EXTRA_INCOMING_NUMBER,
intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER));//电话号码
i.putExtra(TelephonyManager.EXTRA_STATE,
intent.getStringExtra(TelephonyManager.EXTRA_STATE));//电话状态
context.startService(i);//启动服务
}
}<receiver
android:name=".TelReceiver"
>
<intent-filter
android:priority="1000"
>
<action
android:name="ent.action.PHONE_STATE"
/>
<action
android:name="ent.action.NEW_OUTGOING_CALL"
/>
</intent-filter>
</receiver>
四、编写ListenPhoneService组件public
class
ListenPhoneService
extends
Service
{
private
AudioManager
mAudioManager;
private
TelephonyManager
tm;
public
ListenPhoneService()
{
}
@Override
public
void
onCreate()
{
super.onCreate();
mAudioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
tm=(TelephonyManager)getSystemService(Service.TELEPHONY_SERVICE);
}
@Override
public
int
onStartCommand(Intent
intent,
int
flags,
int
startId)
{
if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){//去电广播,android没有来电话广播
}else{//去掉拨打电话就是来电状态了
//方法1
//获得来电电话
//
String
number=intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
//获得电话状态
//
String
state=intent.getStringExtra(TelephonyManager.EXTRA_STATE);
//
Log.d("jereh",
"incoming
phone:"
+
number);
//
Log.d("jereh","call
state:"+state);
//
TelephonyManager.EXTRA_STATE_IDLE:
没有来电
或者
挂断
//
TelephonyManagerEXTRA_STATE_OFFHOOK:
接起电话
//
TelephonyManager.EXTRA_STATE_RINGING:当电话呼入时,响铃时
//
if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)){
//
if(number.equals()){//拦截指定的电话号码
//
mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
//
Log.d("jereh","电话被拦截");
//
stopCall();
//
mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);//恢复铃声
//
}
//
}else
if(state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){
//接起电话
//
recordCall();//开始录音
//
}else
if(state.equals(TelephonyManager.EXTRA_STATE_IDLE)){
//
stopCall();//停止录音
//
}
//方法2
//
设置一个监听器,监听电话状态
tm.listen(listener,PhoneStateListener.LISTEN_CALL_STATE);
}
return
super.onStartCommand(intent,
flags,
startId);
}
/**
*
挂断电话
*/
private
void
stopCall(){
try
{
//Android的设计将ServiceManager隐藏了,所以只能使用反射机制获得。
Method
method=Class.forName("android.os.ServiceManager").getMethod("getService",
String.class);
IBinder
binder=(IBinder)method.invoke(null,
new
Object[]{"phone"});//获得系统电话服务
ITelephony
telephoney=ITelephony.Stub.asInterface(binder);
telephoney.endCall();//挂断电话
stopSelf();//停止服务
}
catch
(Exception
e)
{
e.printStackTrace();
}
}
PhoneStateListener
listener=new
PhoneStateListener(){
@Override
public
void
onCallStateChanged(int
state,String
incomingNumber){
switch
(state){
//手机空闲了
case
TelephonyManager.CALL_STATE_IDLE:
stopCall();//停止录音
break;
//接起电话
case
TelephonyManager.CALL_STATE_OFFHOOK:
recordCall();//开始录音
break;
//
响铃时
case
TelephonyManager.CALL_STATE_RINGING:
Log.e("jereh",
"来电号码是:"+
incomingNumber);
//
如果该号码属于黑名单
if
(incomingNumber.equals("123456"))
{
//
如果是黑名单,就进行屏蔽
stopCall();
}
break;
}
}
};
/**
*
停止录音
*/
private
void
stopRecord(){
if(recording){
recorder.stop();
recorder.release();
recording=false;
stopSelf();//停止服务
}
}
/**
*
电话录音
*/
private
MediaRecorder
recorder;
private
boolean
recording
;
private
void
recordCall(){
Log.d("jereh",
"record
calling")
if(
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
recorder=new
MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//读麦克风的声音
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置输出格式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//
编码方式
File
file=new
File(Environment.getDownloadCacheDirectory().getAbsolutePath(),"recorder");
if(!file.exists()){
file.mkdir();
}
recorder.setOutputFile(file.getAbsolutePath()
+
"/"
+
System.currentTimeMillis()
+
"3gp");//
存放的位置是放在sd卡recorder目录下
try
{
recorder.prepare();
recorder.start();
recording=true;
}
catch
(IOException
e)
{
e.printStackTrace();
}
}
}
@Override
public
IBinder
onBind(Intent
intent)
{
throw
new
UnsupportedOperationException("Not
yet
implemented");
}
}
复制代码
Service
XML配置
<service
android:name=".ListenPhoneService"
android:enabled="true"
android:exported="true"
>
</service>五、***别忘了一些权限的设置<!--
添加访问手机电话状态的权限
-->
<uses-permission
android:name="android.permission.READ_PHONE_STATE"
/>
<!--
拨打电话权限
-->
<uses-permission
android:name="android.permission.CALL_PHONE"
/>
<!--
监听手机去电的权限
-->
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版模板医疗设备租赁与维护合同4篇
- 二零二五版门禁系统与消防报警系统联动施工合同3篇
- 二零二五版门窗行业产品追溯与防伪技术合同4篇
- 2025年度跨境电商平台入驻商家租赁合同4篇
- 2025年度露营装备研发与知识产权保护合同4篇
- 2025年个人借款咨询与信用风险控制服务协议3篇
- 2025版向日葵种子种子质量检测与认证服务合同3篇
- 2025版企业租车服务合同范本(2025版)2篇
- 二零二五年离婚子女抚养权及财产分割执行合同3篇
- 2025版汽车销售场地租赁与智能化管理系统合作协议4篇
- 2024公路沥青路面结构内部状况三维探地雷达快速检测规程
- 2024年高考真题-地理(河北卷) 含答案
- 2024光储充一体化系统解决方案
- 处理后事授权委托书
- 食材配送服务方案投标方案(技术方案)
- 足疗店营销策划方案
- 封条(标准A4打印封条)
- 2024年北京控股集团有限公司招聘笔试参考题库含答案解析
- 延迟交稿申请英文
- 运动技能学习与控制课件第十章动作技能的指导与示范
- 石油天然气建设工程交工技术文件编制规范(SYT68822023年)交工技术文件表格仪表自动化安装工程
评论
0/150
提交评论