android服务监听电话

来源:互联网 发布:怎么用数组接收jquery 编辑:程序博客网 时间:2024/05/01 15:55

当手机开启的时候,发送广播.通过广播,开启服务.在服务中,设置电话监听服务.

在服务中,当开启绑定的时候:

public IBinder onBind(Intent intent) {        // TODO Auto-generated method stub        //获取电话管理的对象        manager=(TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);         //设置监听器        manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);        return new Binder();    }

重写管理器的监听:

   private PhoneStateListener listener=new PhoneStateListener(){        //来电的电话号码        private String incomingNumber;        //媒体记录器        private MediaRecorder recorder;        //是否开启        private boolean flag;          @Override        public void onCallStateChanged(int state, String incomingNumber) {            // TODO Auto-generated method stub          switch(state){          //空闲的时候被调用          case TelephonyManager.CALL_STATE_IDLE:              if(recorder!=null&&flag){                  recorder.stop();                  recorder.release();                  recorder=null;                  flag=false;              }              break;              //电话被接听的时候          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);              File root=Environment.getExternalStorageDirectory();              String name=incomingNumber+System.currentTimeMillis()+".3gp";              File fileName=new File(root,name);              //设置文件的输出路径              recorder.setOutputFile(fileName.getAbsolutePath());              try {                recorder.prepare();                ///表示已经开始录音                flag=true;            } catch (IllegalStateException e) {                // TODO Auto-generated catch block                e.printStackTrace();            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }              recorder.start();               break;              //电话来电的时候          case TelephonyManager.CALL_STATE_RINGING:              this.incomingNumber=incomingNumber;              break;          }        }    };
0 0
原创粉丝点击