- 浏览: 5826968 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
直接看代码
import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import android.app.Activity; import android.content.Context; import android.media.MediaPlayer; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.LinearLayout; /** * http://blog.sina.com.cn/s/blog_68494364010116gk.html * @author reyo * */ public class AudioRecordActivty extends Activity{ private static final String TAG = "AudioRecordActivty"; private static String mFileName = null; private RecordButton mRecordButton = null; private PlayButton mPlayButton = null; private MediaRecorder mRecorder = null; private MediaPlayer mPlayer = null; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); LinearLayout layout = new LinearLayout(this); mRecordButton = new RecordButton(this); layout.addView(mRecordButton,new LinearLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0)); mPlayButton = new PlayButton(this); layout.addView(mPlayButton,new LinearLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0)); setContentView(layout); mFileName = Environment.getExternalStorageDirectory().getPath(); mFileName += "/audiorecordtest.amr"; Log.i("tag", "mFileName="+mFileName); } @Override public void onPause() { super.onPause(); stopRecording(); stopPlaying(); } private void onRecord(boolean start) { if (start) { startRecording(); } else { stopRecording(); } } private void startRecording() { try { mRecorder = new MediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 设置麦克风 mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);// 设置输出文件格式 mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);// 设置编码格式 mRecorder.setOutputFile(mFileName);// 使用绝对路径进行保存文件 mRecorder.prepare(); mRecorder.start(); } catch (IOException e) { Log.e(TAG, "prepare() failed"); } } private void stopRecording() { if(mRecorder!=null){ mRecorder.stop(); mRecorder.release(); mRecorder = null; } } private void startPlaying() { try { mPlayer = new MediaPlayer(); mPlayer.setDataSource(mFileName);//获取绝对路径来播放音频 mPlayer.prepare(); mPlayer.start(); mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { // TODO Auto-generated method stub stopPlaying(); mPlayButton.setEnabled(true); } }); mPlayButton.setEnabled(false); } catch (IOException e) { Log.e(TAG, "prepare() failed"); } } private void stopPlaying() { if(mPlayer!=null){ mPlayer.stop(); mPlayer.release(); mPlayer = null; } } class RecordButton extends Button { boolean mStartRecording = true; public RecordButton(Context ctx) { super(ctx); setText("Start recording"); setOnClickListener(clicker); } OnClickListener clicker = new OnClickListener() { public void onClick(View v) { onRecord(mStartRecording); if (mStartRecording) { setText("Stop recording"); } else { setText("Start recording"); } mStartRecording = !mStartRecording; } }; } class PlayButton extends Button { public PlayButton(Context ctx) { super(ctx); setText("Start playing"); setOnClickListener(clicker); } OnClickListener clicker = new OnClickListener() { public void onClick(View v) { startPlaying(); } }; } class Fileter implements FilenameFilter { public boolean accept(File dir, String filename) { // TODO Auto-generated method stub return filename.equals(".amr"); } } /** * 上传文件 * @param urlStr 服务器地址 * @param file 需要上传的文件 * @return 上传是否成功 */ private boolean uploadFile(String urlStr,File file){ try { String end = "\r\n"; String hyphens = "--"; String boundary = "*****"; URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); /* 允许使用输入流,输出流,不允许使用缓存*/ conn.setDoInput(true); conn.setDoOutput(true); conn.setUseCaches(false); /* 请求方式*/ conn.setRequestMethod("POST"); conn.setRequestProperty("Charset", "UTF-8"); conn.setRequestProperty("Connection", "Keep-Alive"); conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary); /* 当文件不为空,把文件包装并且上传*/ Log.e(TAG, file.toString()); if(file != null){ DataOutputStream ds = new DataOutputStream(conn.getOutputStream()); /* name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件 * filename是文件的名字,包含后缀名的 比如:abc.png*/ ds.writeBytes(hyphens + boundary + end); ds.writeBytes("Content-Disposition: form-data; " + "name=\"file1\";filename=\"" + file.getName() +"\"" + end); ds.writeBytes(end); InputStream input = new FileInputStream(file); int size = 1024; byte[] buffer = new byte[size]; int length = -1; /* 从文件读取数据至缓冲区*/ while((length = input.read(buffer)) != -1){ ds.write(buffer, 0, length); } input.close(); ds.writeBytes(end); ds.writeBytes(hyphens + boundary + hyphens + end); ds.flush(); /* 获取响应码*/ // Log.e(TAG, "ResponseCode==="+conn.getResponseCode()); if(conn.getResponseCode() == 200){ return true; } } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return false; } }
发表评论
-
利用广播实现强制下线功能
2016-12-28 10:45 1473最近一口气买 ... -
Android百分比布局Percent支持库
2015-09-02 11:08 3150虽然有很多的布局可以在 Android 应用程序开发的世界供我 ... -
ViewDragHelper行为测试
2015-08-12 17:36 2745只是简单记录一下 以后可能会实现一些效果 import ... -
android5.x之Palette调色板
2015-07-17 10:30 3342Palette类可以分析一张图片,取出这张图片的特征色,然后为 ... -
使用ClipboardManager剪贴板实现复制粘贴功能
2015-04-10 14:39 3778经常要使用复制粘贴的功能,比如长安一个TextView弹出一个 ... -
LocationListener监听位置变化,当进入到某一距离内时发出提醒
2014-08-19 15:03 7683项目中需要这样的要求: 启动一个服务一直在背后监听当前位置变化 ... -
Android下集成FacebookSDk到项目并发表评论
2013-08-28 14:36 4878项目中需要发表自己的评论到Facebook,需要集成Faceb ... -
Notification的基本用法
2013-05-22 11:52 5968android4.0以前: private static ... -
android音频、视频、拍照基础操作
2013-03-27 11:55 2831播放音乐和视频用的是类:MediaPlayer 刻录声音和视 ... -
tabhost通过手势滑动切换activity
2013-02-18 17:59 11164package com.mars.mp3player; ... -
VideoView简单视频播放
2013-02-17 17:17 9305只是上上手而已的例子。 package com.chen ... -
android 再按一次后退键退出应用程序
2012-06-15 21:51 4133private static Boolean isExit ... -
AlarmManager全局定时器/闹钟
2012-02-01 10:11 5863http://407827531.iteye.com/blog ... -
倒计时的CountDownTimer
2011-12-23 13:06 31248直接看这里吧,我只是搬运工。 定时执行在一段时候后停止的倒计 ... -
Android流量统计TrafficStats类的使用
2011-12-06 16:25 26467对于Android流量统计来说在2.2版中新加入了Traffi ... -
ScrollView当显示超出当前页面时自动移动到最底端
2011-09-01 09:42 17016卷轴视图(ScrollView)是指当拥有很多内容,一屏显示不 ... -
在SurfaceView上拖动一架飞机
2011-08-23 12:40 2943接上一篇在SurfaceView上拖动一张小图片 什么叫拖动飞 ... -
在SurfaceView上拖动一张小图片
2011-08-22 18:20 5249用手指随便拖。这里采用了线程去绘制,其实也可以在onTouch ... -
用getIdentifier()获取资源Id
2011-07-28 22:36 10776做项目过程中遇到一个问题,从数据库里读取图片名称,然后调用图片 ... -
利用VelocityTracker监控对触摸的速度跟踪
2011-07-28 22:12 10066VelocityTracker就是速度跟踪的意思。我们可以获得 ...
相关推荐
简单的录音以及播放处理;mediaRecorder以文件形式录制,由mediaplayer播放。
在Android开发中,MediaRecorder和MediaPlayer是两个非常重要的类,它们分别用于音频、视频的录制和播放。在本教程中,我们将深入探讨这两个类的使用方法,并通过一个实际的案例——"MyRecorder"来理解其工作原理。 ...
在"Android Media Recorder录音与播放"这个主题中,我们将深入探讨如何利用MediaRecorder类进行高质量的音频录制以及如何回放这些录制内容。MediaRecorder提供了比Intent录音更丰富的功能,比如自定义编码格式、调整...
本文将深入探讨如何使用MediaRecorder进行录音和播放操作,通过源码解析来帮助开发者理解其实现原理。 首先,我们来看录音部分。在Android中,使用MediaRecorder进行录音通常包括以下步骤: 1. 初始化...
创建MediaPlayer实例,使用setDataSource()方法设置录音文件路径,然后调用prepare()准备播放,最后调用start()开始播放。同样,播放完毕后,别忘了调用release()释放资源。 6. 处理权限: 由于Android 6.0(API...
### MediaPlayer播放录音 完成录制后,我们可以使用`MediaPlayer`类来播放音频文件。以下是一般的播放流程: 1. **初始化MediaPlayer** 创建`MediaPlayer`对象,并设置要播放的音频文件: ```java MediaPlayer ...
总结起来,这个项目利用`MediaRecorder` 实现了简单的录音功能,使用`MediaPlayer` 进行播放,整个过程无需复杂的音频处理,适合初学者学习和参考。代码结构清晰,易于理解和维护,且经过测试,运行时没有bug,保证...
在Android应用中实现录音和播放功能涉及多个步骤,包括配置MediaRecorder和MediaPlayer,处理权限,以及与UI交互。通过以上的代码示例,我们可以构建一个基本的录音和播放系统。不过,实际应用中可能需要考虑更多的...
通话录音演示 这是一个简单的电话录音演示,用户可以用来捕获VOIP对话。 由于启动VOIP通信而暂时失去音频焦点时... 然后调用MediaPlayer播放记录的文件。 建造 可以使用Android Studio构建该项目,并且没有其他依赖项。
此外,考虑到用户体验,可以添加进度条显示录音或播放的进度,使用MediaRecorder和MediaPlayer提供的回调方法更新进度条的状态。例如,使用MediaPlayer的`OnBufferingUpdateListener`监听音频缓冲进度,使用`...
首先,我们需要了解Android系统提供的MediaRecorder和MediaPlayer类,这两个类是实现音频录制和播放的核心组件。 **一、录音** 1. **配置MediaRecorder** 在开始录音前,需要实例化MediaRecorder对象,并进行一...
综上所述,实现“开机自动边录音边播放”功能涉及了Android服务、BroadcastReceiver、MediaRecorder、MediaPlayer等多个核心组件和概念,需要综合运用这些知识点,结合具体代码实现,才能达到预期效果。在实际开发...
录音涉及到MediaRecorder类,而播放则涉及MediaPlayer类。MediaRecorder用于捕捉音频或视频数据,并将其保存到文件;MediaPlayer则用于读取并播放多媒体文件。 2. **权限管理** 在Android中,录音功能需要申请`...
总结,Android的录音和播放涉及到`MediaRecorder`和`MediaPlayer`这两个核心类,以及音频数据处理、网络请求和本地文件管理等多方面的知识。通过合理的设计和实现,我们可以构建出功能完善的音频应用。
Android提供了多种API来处理音频,包括MediaRecorder用于录音,MediaPlayer用于播放音频,以及AudioTrack和AudioRecord等低级API。对于初学者,MediaRecorder和MediaPlayer是首选,因为它们易于理解和使用。 **录音...
总结起来,Android的录音和播放功能主要依赖MediaRecorder和MediaPlayer,而Socket通信涉及Socket和ServerSocket类。理解并熟练应用这些API,可以帮助开发者实现丰富的音频处理和网络通信功能。在实际项目中,还需要...
录音按钮点击事件触发录音操作,播放按钮则启动MediaPlayer播放音频。此外,可能还需要处理权限问题,如READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限,确保应用有权限访问和操作外部存储上的音频文件。 总的...
在Android平台上,录音...总的来说,Android中的录音和播放功能主要依赖于MediaRecorder和MediaPlayer这两个核心类。通过正确配置和管理这两个对象,我们可以轻松地实现各种录音和播放需求,为用户提供丰富的交互体验。
综上所述,Android的MediaRecorder和MediaPlayer类提供了录音和播放的功能,而AudioTrack则允许开发者对音频数据进行更精细的控制。通过结合这些API,你可以实现根据音频文件大小动态调整播放效果的功能,为用户提供...
这通常涉及到两个关键组件:`MediaRecorder`用于录音,`MediaPlayer`用于播放录音。本文将深入探讨这两个API的使用,以及如何在实际项目中整合它们来实现录音和播放功能。 首先,`MediaRecorder`是Android提供的一...