摘要: 我们可以在很多应用中都能看到按两次返回键退出 , 其实这个功能实现很容易, 下面就是实现的代码 , 把它放到你的程序中你的程序就能按两次返回键退出啦, 这个功能是为了避免误点而把程序退出了 ,给你的程序也加上这个简单实用的功能把 :import android.app.Activity;import android.app.AlertDialog;import android.os.Bundle;import android.view.KeyEvent;import android.view.WindowManager;import android.widget.Toast;public cl 阅读全文
posted @ 2014-03-13 19:58 MMLoveMeMM 阅读(1114) 评论(0) 推荐(0)
摘要: 本例严重过期,并且使用了不开源且收费的库 请尝试最新开源版: Android基于OpenSL ES,Speex,RTMP的Voip客户端实现 iOS版: iOS基于Audio Queues,Speex,Rtmp的Voip客户端—————-仅供参考请勿用于项目———————– 先说下实现原理,手机采集到语音后进过Speex编码,通过juv以直播形式发布自己的语音流到red5,也是通过juv播放对方的直播流,经过Speex解码后输出到扬声器,如下图: Android端采集编码和解码播放Speex,参考android-recorder,至于他用的red5客户端,看了下,没看明白。。。 JUV这库吧 阅读全文
posted @ 2014-03-13 00:28 MMLoveMeMM 阅读(959) 评论(0) 推荐(0)
摘要: Eclipse 常用快捷键 Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率。Eclipse中有如下一些和编辑相关的快捷键。 1. 【ALT+/】 此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类、方法和属性的名字时,多体验一下【ALT+/】快捷键带来的好处吧。 2. 【Ctrl+O】 显示类中方法和属性的大纲,能快速定位类的方法和属性,在查找Bug时非常有用。3. 【Ctrl+/】 快速添加注释,能为光标所在行或所选定行快速添加注释或取消注释,在调试的时候可能总会需要注释一些东西或取消注释,现在好了,不... 阅读全文
posted @ 2014-03-13 00:26 MMLoveMeMM 阅读(256) 评论(0) 推荐(0)
摘要: 最近在在研究语音通话的实现,现在把我的实现思路记录在这里。不过,由于初次接触语音通话,所以这是一个简单的思路,也是经过google以及baidu之后的一个学习总结。 我认为一个语音通话系统至少有四个模块。分别是PCM(Pulse Code Modulation,即 脉码编码调制)语音采集,编解码,网络传输以及语音播放。如果算上UI交互的话,就是五个模块了。 整体流程大概是:A打电话给B,A声音通过MIC被采集成PCM原始数据,然后经过编码压缩,再通过网络(建立P2P连接)将编码后的数据传输出去;B端通过网络收到数据后进行解码处理,然后调用播放模块,进行播放数据。 一、语音采集模块 An... 阅读全文
posted @ 2014-03-13 00:24 MMLoveMeMM 阅读(560) 评论(0) 推荐(0)
摘要: AudioRecord和AudioTrack类是Android获取和播放音频流的重要类,放置在android.media包中。与该包中的MediaRecorder和MediaPlayer类不同,AudioRecord和AudioTrack类在获取和播放音频数据流时无需通过文件保存和文件读取,可以动态地直接获取和播放音频流,在实时处理音频数据流时非常有用。 当然,如果用户只想录音后写入文件或从文件中取得音频流进行播放,那么直接使用MediaRecorder和MediaPlayer类是首选方案,因为这两个类使用非常方便,而且成功率很高。而AudioRecord和AudioTrack类的使用却比较. 阅读全文
posted @ 2014-03-13 00:22 MMLoveMeMM 阅读(676) 评论(0) 推荐(0)
摘要: 路漫漫其修远兮,吾将上下而求索。——屈原《离骚》 昨天写this用法总结的时候,突然产生了一个问题,请教别人之后,有了自己的一点认识。还是把它写下来,为大家更好的认识提供一点思路。1)有人写了个很好的初始化属性的构造函数,而你仅仅想要在其中添加另一些自己新建属性的初始化,这样在一个构造函数中调用另外一个构造函数,可以避免重复的代码量,减少工作量;2)在一个构造函数中调用另外一个构造函数的时候应该用的是同一块内存空间,在默认的构造函数中先初始化变量,调用另一个的时候覆写已经初始化的变量的值;3)整个调用的过程和递归调用函数有点类似,不断充气球,直到整个气球膨胀起来,不断的深层递进,遇到停止标记. 阅读全文
posted @ 2014-03-13 00:15 MMLoveMeMM 阅读(309) 评论(0) 推荐(0)