配置文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="codefans.app"
android:versionCode=""
android:versionName="1.0" > <uses-sdk android:minSdkVersion="" /> <!-- 监听电话状态权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- 在SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!-- 刻入声音权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<service android:name=".PhoneService"></service>
<receiver android:name=".PhoneBroadcastReceiver">
<intent-filter >
<action android:name="android.intent.action.BOOT_COMPLETED"/> <!-- 开机启动广播 -->
</intent-filter>
</receiver>
</application> </manifest>
public class PhoneService extends Service
{ @Override
public IBinder onBind(Intent intent)
{
// TODO Auto-generated method stub
return null;
} @Override
public void onCreate()
{
super.onCreate(); TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); telephonyManager.listen(new PhoneListener(), PhoneStateListener.LISTEN_CALL_STATE); //注册监听器 监听电话状态
} private final class PhoneListener extends PhoneStateListener
{
private String incomeNumber; //来电号码
private MediaRecorder mediaRecorder;
private File file;
@Override
public void onCallStateChanged(int state, String incomingNumber)
{
try
{
switch(state)
{
case TelephonyManager.CALL_STATE_RINGING: //来电
this.incomeNumber = incomingNumber;
break;
case TelephonyManager.CALL_STATE_OFFHOOK: //接通电话
file = new File(Environment.getExternalStorageDirectory(), this.incomeNumber + System.currentTimeMillis() + ".3gp");
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); //获得声音数据源
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); // 按3gp格式输出
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediaRecorder.setOutputFile(file.getAbsolutePath()); //输出文件
mediaRecorder.prepare(); //准备
mediaRecorder.start();
break; case TelephonyManager.CALL_STATE_IDLE: //挂掉电话
if(mediaRecorder != null)
{
mediaRecorder.stop();
mediaRecorder.release();
mediaRecorder = null;
} break; }
}
catch (IllegalStateException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
} } }
public class PhoneBroadcastReceiver extends BroadcastReceiver
{ @Override
public void onReceive(Context context, Intent intent)
{
Intent service = new Intent(context, PhoneService.class);
context.startService(service); //启动服务
} }

Android 实现电话录音(窃听)的更多相关文章

  1. Android简易实战教程--第三十六话《电话录音》

    今天完成一个简单的电话录音功能,即接通电话后,立即录下自己打电话的声音.实现起来比较简单:一个服务,一个TelephonyManager.一个MediaRecorder就够了. 1.布局提供一个开启录 ...

  2. Android四大组件应用系列——实现电话拦截和电话录音

    一.问题描述 使用BordercastReceiver和Service组件实现下述功能: 1.当手机处于来电状态,启动监听服务,对来电进行监听录音. 2.设置电话黑名单,当来电是黑名单电话,则直接挂断 ...

  3. android service 样例(电话录音和获取系统当前时间)

    关于android service 的具体解释请參考: android四大组件--android service具体解释.以下将用两个实例具体呈现Android Service的两种实现. 一个是st ...

  4. Android实现电话录音功能

    需求分析 电话录音是在通话的时候进行录音,所以需要使用一个服务来完成功能. 需要监听电话的状态,分为三种状态:  空闲状态 TelephonyManager.CALL_STATE_IDLE 响铃状态 ...

  5. Android TelephonyManager电话管理器

    今天介绍一下Android的电话管理器--TelephonyManager,TelephonyManager管理手机通话状态.电话网络信息的服务类,获取TelephonyManager: Teleph ...

  6. android 调用电话功能

    今天用到了打电话的功能,这要如何实现呢? 很简单 1.创建对应对的xml展示页面喝java文件 2.在manifest中添加权限 下面上代码吧: 这是布局的一部分 <LinearLayout a ...

  7. 【Android】【录音】Android录音--AudioRecord、MediaRecorder

    [Android][录音]Android录音--AudioRecord.MediaRecorder Android提供了两个API用于实现录音功能:android.media.AudioRecord. ...

  8. Android 使用MediaRecorder录音

    package com.example.HyyRecord; import android.app.Activity; import android.content.Intent; import an ...

  9. android的电话监听

    android的电话监听 新建一个项目,结构图如下: PhoneService: package com.demo.tingdianhua; import android.app.Service; i ...

随机推荐

  1. java 实现在线阅读 .pdf

    1.资源的本地地址 2.设置响应头 3.代码实现 @ResponseBody @RequestMapping(value = "/read") @ApiOperation(valu ...

  2. ICEM二维网格

    非结构网格 结构网格 拓扑 拓扑完建立part边界条件,然后创建block 拓扑完后进行边界条件关联 全局网格设置

  3. In linux shell, How to cp/rm files by time?

    find /path/to/folder/ -mtime 1 -exec rm {} \; // Deletes all Files modified yesterday

  4. 网络寻路(思维+vector的应用)-----------蓝桥备战系列

    标题:网络寻路 X 国的一个网络使用若干条线路连接若干个节点.节点间的通信是双向的.某重要数据包,为了安全起见,必须恰好被转发两次到达目的地.该包可能在任意一个节点产生,我们需要知道该网络中一共有多少 ...

  5. 数独求解问题(DFS+位运算优化)

    In the game of Sudoku, you are given a large 9 × 9 grid divided into smaller 3 × 3 subgrids. For exa ...

  6. Oracle分组函数之CUBE魅力

    Oracle的CUBE与ROLLUP功能很相似,也是在数据统计分析领域的一把好手. 关于ROLLUP的查询统计功能请参考文章<Oracle分组函数之ROLLUP魅力>(http://www ...

  7. C++ GUI Qt4编程(04)-2.1findDialog

    finddialog.h /* * 未实现findNextSignal和findPreviousSignal */ #ifndef FINDDIALOG_H #define FINDDIALOG_H ...

  8. (转)一条SQL更新语句是如何执行的

    名词 MySQL 里经常说到的 WAL 技术,Write-Ahead Logging 第一个日志模块 redo log 也叫日志重写,是InnoDB 引擎特有的日志 - write pos and c ...

  9. Hadoop Ecosytem

    There are a lot of Hadoop related projects which are open sourced and widely used by many componies. ...

  10. 024-cxf.xml配置文件模板

    版本一 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://ww ...