监听电话app
一.功能简介:
本demo基于android 6.0实现对麦克风的录音,将录音保存到本地。利用广播监听开机启动,并开启监听服务。如果有兴趣,可以添加网络权限和上传功能到指定邮箱等等。
二. 代码简介
1.StartPhoneBroadcast.java 本类用于监听开机启动事件,并开启监听服务。
2.MyService.java类
因为需要申请权限,所以在MainActivity中添加权限申请。
Manifest.permission.READ_PHONE_STATE, //读取电话状态
Manifest.permission.RECEIVE_BOOT_COMPLETED, //开机启动广播(不需要手动申请)
Manifest.permission.WRITE_EXTERNAL_STORAGE, //读写SD卡
Manifest.permission.RECORD_AUDIO //录音权限
五.总结
本案例是用来学习监听电话录音的,由于录音只能识别麦克风的声音,所以只能录下自己说的话,如果需要录下对方的声音,需要在打电话的时候开启扬声器。
本demo基于android 6.0实现对麦克风的录音,将录音保存到本地。利用广播监听开机启动,并开启监听服务。如果有兴趣,可以添加网络权限和上传功能到指定邮箱等等。
二. 代码简介
1.StartPhoneBroadcast.java 本类用于监听开机启动事件,并开启监听服务。
public void onReceive(Context context, Intent intent) {
if(ACTION_BOOT.equals(intent.getAction())){
//检测到系统开机
Toast.makeText(context,"已开机",Toast.LENGTH_LONG).show();
Intent service=new Intent();
service.setClass(context, MyService.class);
context.startService(service);
}
} 注:ACTION_BOOT为自定义字符串private final String ACTION_BOOT = "android.intent.action.BOOT_COMPLETED";2.MyService.java类
@Override
public void onCreate() {
super.onCreate();
//获取电话管理器对象
TelephonyManager telephonyManager= ( TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
//设置电话监听器,监听电话状态
telephonyManager.listen(new MyTelephoneListener(),PhoneStateListener.LISTEN_CALL_STATE);
}
//定义监听内部类实现监听录音
class MyTelephoneListener extends PhoneStateListener{
private MediaRecorder recorder;
private boolean record;
private File audioFile;
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state){
case TelephonyManager.CALL_STATE_OFFHOOK:
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//从麦克风采集声音
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //内容输出格式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//输出到缓存目录,此处可以添加上传录音的功能,也可以存到其他位置
audioFile = new File(getCacheDir(), "recoder"+ "_" + System.currentTimeMillis() + ".3gp");
recorder.setOutputFile(audioFile.getAbsolutePath());
try {
recorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
recorder.start();
record=true;
Log.i(tag,"电话已经摘机");
break;
case TelephonyManager.CALL_STATE_RINGING:
String mobile=incomingNumber;
Log.i(tag,"电话已响铃");
Log.i(tag,mobile+"来电");
break;
case TelephonyManager.CALL_STATE_IDLE:
if(record) {
recorder.stop(); //停止刻录
recorder.release(); //释放资源
Log.i(tag, "电话空闲");
record=false;
}
break;
}
}
}三.MainActivity类因为需要申请权限,所以在MainActivity中添加权限申请。
Manifest.permission.READ_PHONE_STATE, //读取电话状态
Manifest.permission.RECEIVE_BOOT_COMPLETED, //开机启动广播(不需要手动申请)
Manifest.permission.WRITE_EXTERNAL_STORAGE, //读写SD卡
Manifest.permission.RECORD_AUDIO //录音权限
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
verifyStoragePermissions(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return super.onCreateOptionsMenu(menu);
}
private static final int READ_PHONE_STATE = 1;
private static String[] CALLS_STATE = {
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.RECORD_AUDIO
};
public static void verifyStoragePermissions(Activity activity) {
int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_PHONE_STATE);
if (permission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity, CALLS_STATE , READ_PHONE_STATE);
}
}四.在资源文件中配置<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="my.com.services01">
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
<!-- 用于隐藏应用快捷图标-->
<data android:host="MainActivity" android:scheme="my.com.Mainactivity" />
</intent-filter>
</activity>
<service android:name="my.com.service.MyService">
</service>
<receiver android:name="my.com.broadcast.StartPhoneBroadcast" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
</manifest>五.总结
本案例是用来学习监听电话录音的,由于录音只能识别麦克风的声音,所以只能录下自己说的话,如果需要录下对方的声音,需要在打电话的时候开启扬声器。
该Android示例展示了如何在6.0系统上监听电话并使用MediaRecorder进行录音,录音保存到本地。通过BroadcastReceiver监听开机启动,并启动监听服务。在电话状态变化时开始和停止录音。

1万+

被折叠的 条评论
为什么被折叠?



