1.MainActivity.java

import android.annotation.TargetApi;
import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast; import java.io.File;
import java.io.IOException; public class MainActivity extends Activity implements View.OnClickListener {
private final static String TAG = "debug--";
private Button btnRecord,btnStop,btnPlay;
private File soundFile;
private MediaRecorder mRecoder;
private MediaPlayer mPlayer;
private TextView mTxt ;
private Handler handler = new Handler(){
public void handleMessage(Message msg) {
Log.d(TAG, Integer.toString(msg.what));
mTxt.setText(msg.what/60+":"+msg.what%60);
super.handleMessage(msg);
}
}; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); btnRecord = (Button)findViewById(R.id.start);
btnStop = (Button)findViewById(R.id.stop);
btnPlay = (Button)findViewById(R.id.play);
mTxt = (TextView)findViewById(R.id.txtTime);
btnRecord.setOnClickListener(this);
btnStop.setOnClickListener(this);
btnPlay.setOnClickListener(this);
} public void onDestroy() { super.onDestroy();
if((mRecoder != null) && (soundFile !=null) && (soundFile.exists())) {
mRecoder.stop();
mRecoder.release();
mRecoder = null;
} } @Override
public void onClick(View v)
{
switch(v.getId())
{
case R.id.start:
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
Toast.makeText(MainActivity.this,"check SD Card Faild!",Toast.LENGTH_SHORT).show();
return;
} try {
soundFile = new File("sdcard/sound.amr");
mRecoder = new MediaRecorder();
mRecoder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecoder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
mRecoder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecoder.setOutputFile(soundFile.getAbsolutePath());
mRecoder.prepare();
mRecoder.start();
showRecordTime();
Log.d(TAG, "start");
Toast.makeText(MainActivity.this,"start Recording!",Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
break;
case R.id.stop:
if(soundFile != null && soundFile.exists())
{
mRecoder.stop();
mRecoder.release();
mRecoder = null;
Log.d(TAG, "stop");
Toast.makeText(MainActivity.this,"Stop Recording!",Toast.LENGTH_SHORT).show();
}
break;
case R.id.play:
{
Log.d(TAG,btnPlay.getText().toString());
if (btnPlay.getText().toString().equalsIgnoreCase("Play") ) {
Log.d(TAG,"play@@@@@@@");
mPlayer = new MediaPlayer();
try {
mPlayer.setDataSource("sdcard/sound.amr");
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.prepare();
mPlayer.start();
btnPlay.setText("Stop");
} catch (IOException e) {
e.printStackTrace();
}
}else if (btnPlay.getText().toString().equalsIgnoreCase("Stop") )
{
if(mPlayer != null)
{
mPlayer.stop();
mPlayer.release();
btnPlay.setText("Play");
}
}
}
break;
} } private void showRecordTime() { new Thread(new Runnable() {
@Override
public void run() {
int time_sec = 0;
while(mRecoder != null)
{
try {
Thread.sleep(1000);
Message message = new Message();
time_sec +=1;
message.what = time_sec ;
handler.sendMessage(message);
} catch (InterruptedException e) {
e.printStackTrace();
}
} }
}).start(); }
}

2.activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1"> <TextView
android:layout_width="match_parent"
android:layout_height="100dp"
android:gravity="center"
android:textSize="40dip"
android:textColor="#000000"
android:id="@+id/txtTime"/>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="1dp">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/start"
android:text="start"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/stop"
android:text="stop"/>
</LinearLayout> <Button
android:text="play"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/play" /> </LinearLayout>

3.AndroidMainfest.xml添加权限

<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

【Android 多媒体应用】使用MediaRecoder录制,MediaPlayer播放音频数据的更多相关文章

  1. Android学习总结(十六) ———— MediaPlayer播放音频与视频

    一.基本概念 本文主要介绍的是Android中很重要也最为复杂的媒体播放器(MediaPlayer)部分的架构.Android的MediaPlayer包含了Audio和video的播放功能,在Andr ...

  2. Android MediaPlayer 播放音频

    本文链接: Android MediaPlayer 播放音频 主要介绍使用MediaPlayer播放音频的方式.关于MediaPlayer的基础知识,比如状态,可以参考Android MediaPla ...

  3. MediaPlayer播放音频,也可以播放视频

    使用MediaPlayer播放音频或者视频的最简单例子: JAVA代码部分: public class MediaPlayerStudy extends Activity { private Butt ...

  4. (原)关于OpenSL ES播放音频数据的一个奇怪的问题

    关于OpenSL ES播放音频数据的一个奇怪的问题 Author:lihaiping1603@aliyun.com 最近用业余时间做了一个android平台的播放器sdk,其中视频用的opengl e ...

  5. Android 视频播放器 (二):使用MediaPlayer播放视频

    在 Android 视频播放器 (一):使用VideoView播放视频 我们讲了一下如何使用VideoView播放视频,了解了基本的播放器的一些知识和内容.也知道VideoView内部封装的就是Med ...

  6. 【我的Android进阶之旅】解决MediaPlayer播放音乐的时候报错: Should have subtitle controller already set

    一错误描述 二错误解决 解决方法一 解决方法二 一.错误描述 刚用MediaPlayer播放Music的时候,看到Log打印台总是会打印一条错误日志,MediaPlayer: Should have ...

  7. 使用MediaPlayer播放音频-----之二

    MediaPlayer播放不同来源的音频文件: 一.播放应用的资源文件 1.调用MediaPlayer的create(Context  context , int  resid)方法加载指定资源文件. ...

  8. 使用MediaPlayer播放音频-----之一

    MediaPlayer提供了如下方法来指定装载相应的音频文件: 1.void  setDataSource( String  path):指定装载path路径所代表的文件. 2.void  setDa ...

  9. AudioManager: android插上耳机仍然使用扬声器播放音频

    手机音频的输出有外放(Speaker).听筒(Telephone Receiver).有线耳机(WiredHeadset).蓝牙音箱(Bluetooth A2DP)等输出设备.在平时,电话免提.插拔耳 ...

随机推荐

  1. jsp实现浏览器全屏

    在web系统中实现按钮控制浏览器全屏. <!DOCTYPE html> <%@ page contentType="text/html;charset=UTF-8" ...

  2. openstack-ansible -- 3 Target hosts

    Installing the operating system Install the Ubuntu Server 14.04 (Trusty Tahr) LTS 64-bit operating s ...

  3. 动态链接库(dll)文件的动态调用(使用动态链接库,解析Wis文件--测井数据文件的一种)

    在画出井眼轨迹后,老师又给了三口井的数据,不过这次给的数据是WIS格式的,可以使用一个动态链接库进行解析,解析结束后会生成一个固定格式的txt文件,然后再读取txt文件,画井眼轨迹. 学长给了一个可以 ...

  4. Rest Web Api Controller 返回JSON格式大小写

    public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Ro ...

  5. CodeForces 444C 线段树

    想分块想了很久一点思路都没有,结果一看都是写的线段树= = ...完全忘记了还有线段树这种操作 题意:给一个数组,一种操作是改变l到r为c,还有一种操作是查询l到r的总和差 线段树记得+lazy标记 ...

  6. TODO 正则表达式

    TODO: break it. \btodo\b.* FIXME: break it. \bfixme\b.* TODO: [Bob] break it. \btodo\s*:\s*\[bob\].*

  7. c++中对齐方式

    使用cout<<setiosflags(ios::right)以后, 再调用 cout<<setiosflags(ios::left);无效的, 你可以在调用之前加上一句 co ...

  8. oracle管理优化必备语句以及oracle SQL语句性能调整

    本文转自http://www.dataguru.cn/article-3302-1.html oracle数据库管理优化必备语句: 1. SELECT T.START_TIME,T.USED_UBLK ...

  9. NAVICAT PREMIUM 初识

    1 问题运行SQL取数语句出错?. 答案:因为运行SQL文件时没有这个表.新的数据库里面 解决方法: 获取需要建立的二维表创建语句 新建查询 输入语句,点击运行即可 解释注释语句: 主体为五个字段的主 ...

  10. 深入探索C++对象模型 读书笔记

    第1章 关于对象 1.C++在布局以及存取时间上的主要的额外负担是由virtual引起的,包括: a.virtual function机制,引入vptr以及vtbl,支持一个有效率的"执行期 ...