Android实现自制和播放录音程序

首先,让我们先看下实现的截图:

当有录音文件存在时,会显示在下面的ListView当中。

下面给出实现的完整代码:

1.主程序代码

package irdc.ex07_11;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckedTextView;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class EX07_11 extends Activity
{
 private ImageButton myButton1;
 private ImageButton myButton2;
 private ImageButton myButton3;
 private ImageButton myButton4;
 private ListView myListView1;
 private String strTempFile = "ex07_11_";
 private File myRecAudioFile;
 private File myRecAudioDir;
 private File myPlayFile;
 private MediaRecorder mMediaRecorder01;

 private ArrayList<String> recordFiles;
 private ArrayAdapter<String> adapter;
 private TextView myTextView1;
 private boolean sdCardExit;
 private boolean isStopRecord;

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  myButton1 = (ImageButton) findViewById(R.id.ImageButton01);
  myButton2 = (ImageButton) findViewById(R.id.ImageButton02);
  myButton3 = (ImageButton) findViewById(R.id.ImageButton03);
  myButton4 = (ImageButton) findViewById(R.id.ImageButton04);
  myListView1 = (ListView) findViewById(R.id.ListView01);
  myTextView1 = (TextView) findViewById(R.id.TextView01);
  myButton2.setEnabled(false);
  myButton3.setEnabled(false);
  myButton4.setEnabled(false);

  /* 判断SD Card是否插入 */
  sdCardExit = Environment.getExternalStorageState().equals(
    android.os.Environment.MEDIA_MOUNTED);
  /* 取得SD Card路径做为录音的文件位置 */
  if (sdCardExit)
   myRecAudioDir = Environment.getExternalStorageDirectory();

  /* 取得SD Card目录里的所有.amr文件 */
  getRecordFiles();

  adapter = new ArrayAdapter<String>(this,
    R.layout.my_simple_list_item, recordFiles);
  /* 将ArrayAdapter存入ListView对象中 */
  myListView1.setAdapter(adapter);

  /* 录音 */
  myButton1.setOnClickListener(new ImageButton.OnClickListener()
  {

   @Override
   public void onClick(View arg0)
   {
    try
    {
     if (!sdCardExit)
     {
      Toast.makeText(EX07_11.this, "请插入SD Card",
        Toast.LENGTH_LONG).show();
      return;
     }

     /* 建立录音档 */
     myRecAudioFile = File.createTempFile(strTempFile, ".amr",
       myRecAudioDir);

     mMediaRecorder01 = new MediaRecorder();
     /* 设定录音来源为麦克风 */
     mMediaRecorder01
       .setAudioSource(MediaRecorder.AudioSource.MIC);
     mMediaRecorder01
       .setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
     mMediaRecorder01
       .setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

     mMediaRecorder01.setOutputFile(myRecAudioFile
       .getAbsolutePath());

     mMediaRecorder01.prepare();

     mMediaRecorder01.start();

     myTextView1.setText("录音中");

     myButton2.setEnabled(true);
     myButton3.setEnabled(false);
     myButton4.setEnabled(false);

     isStopRecord = false;

    } catch (IOException e)
    {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }

   }
  });
  /* 停止 */
  myButton2.setOnClickListener(new ImageButton.OnClickListener()
  {

   @Override
   public void onClick(View arg0)
   {
    // TODO Auto-generated method stub
    if (myRecAudioFile != null)
    {
     /* 停止录音 */
     mMediaRecorder01.stop();
     /* 将录音文件名给Adapter */
     adapter.add(myRecAudioFile.getName());
     mMediaRecorder01.release();
     mMediaRecorder01 = null;
     myTextView1.setText("停止:" + myRecAudioFile.getName());

     myButton2.setEnabled(false);

     isStopRecord = true;
    }
   }
  });
  /* 播放 */
  myButton3.setOnClickListener(new ImageButton.OnClickListener()
  {

   @Override
   public void onClick(View arg0)
   {
    // TODO Auto-generated method stub
    if (myPlayFile != null && myPlayFile.exists())
    {
     /* 开启播放的程序 */
     openFile(myPlayFile);
    }

   }
  });
  /* ?除 */
  myButton4.setOnClickListener(new ImageButton.OnClickListener()
  {

   @Override
   public void onClick(View arg0)
   {
    // TODO Auto-generated method stub
    if (myPlayFile != null)
    {
     /* 因将Adapter移除文件名 */
     adapter.remove(myPlayFile.getName());
     /* 删除文件 */
     if (myPlayFile.exists())
      myPlayFile.delete();
     myTextView1.setText("完成删除");
    }

   }
  });

  myListView1.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {
     @Override
     public void onItemClick(AdapterView<?> arg0, View arg1,
       int arg2, long arg3)
     {
      /* 当有点选文件名时将删除及播放按钮Enable */
      myButton3.setEnabled(true);
      myButton4.setEnabled(true);

      myPlayFile = new File(myRecAudioDir.getAbsolutePath()
        + File.separator
        + ((CheckedTextView) arg1).getText());
      myTextView1.setText("你选的是:"
        + ((CheckedTextView) arg1).getText());
     }
    });

 }

 @Override
 protected void onStop()
 {
  if (mMediaRecorder01 != null && !isStopRecord)
  {
   /* 停止录音 */
   mMediaRecorder01.stop();
   mMediaRecorder01.release();
   mMediaRecorder01 = null;
  }
  super.onStop();
 }

 private void getRecordFiles()
 {
  recordFiles = new ArrayList<String>();
  if (sdCardExit)
  {
   File files[] = myRecAudioDir.listFiles();
   if (files != null)
   {

    for (int i = 0; i < files.length; i++)
    {
     if (files[i].getName().indexOf(".") >= 0)
     {
      /* 读取.amr文件 */
      String fileS = files[i].getName().substring(
        files[i].getName().indexOf("."));
      if (fileS.toLowerCase().equals(".amr"))
       recordFiles.add(files[i].getName());

     }
    }
   }
  }
 }

 /* 开启播放录音文件的程序 */
 private void openFile(File f)
 {
  Intent intent = new Intent();
  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  intent.setAction(android.content.Intent.ACTION_VIEW);

  String type = getMIMEType(f);
  intent.setDataAndType(Uri.fromFile(f), type);
  startActivity(intent);
 }

 private String getMIMEType(File f)
 {
  String end = f.getName().substring(
    f.getName().lastIndexOf(".") + 1, f.getName().length())
    .toLowerCase();
  String type = "";
  if (end.equals("mp3") || end.equals("aac") || end.equals("aac")
    || end.equals("amr") || end.equals("mpeg")
    || end.equals("mp4"))
  {
   type = "audio";
  } else if (end.equals("jpg") || end.equals("gif")
    || end.equals("png") || end.equals("jpeg"))
  {
   type = "image";
  } else
  {
   type = "*";
  }
  type += "/*";
  return type;
 }
}

2.总体布局文件代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:background="@drawable/white">
 <LinearLayout
 android:id="@+id/LinearLayout01"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content">
 <ImageButton
 android:id="@+id/ImageButton01"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:src="@drawable/record">
 </ImageButton>
 <ImageButton
 android:id="@+id/ImageButton02"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:src="@drawable/stop">
 </ImageButton>
 <ImageButton
 android:id="@+id/ImageButton03"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:src="@drawable/play">
 </ImageButton>
 <ImageButton
 android:id="@+id/ImageButton04"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:src="@drawable/delete">
 </ImageButton>
 </LinearLayout>
 <TextView
 android:id="@+id/TextView01"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:textColor="@drawable/black">
 </TextView>
 <ListView
 android:id="@+id/ListView01"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:background="@drawable/black">
 </ListView>
</LinearLayout>

3.ListView中的子View的布局

<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/myCheckedTextView1"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:textColor="@drawable/white"/>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android开发四大组件之实现电话拦截和电话录音

    一.问题描述 使用BordercastReceiver和Service组件实现下述功能: 1.当手机处于来电状态,启动监听服务,对来电进行监听录音. 2.设置电话黑名单,当来电是黑名单电话,则直接挂断. 当拨打电话或电话状态发生改变时,系统就会发出有序广播,因此我们可以使用BordercastReceiver接受广播,因BordercastReceiver执行时间短不能执行耗时任务也不能使用子线程,因此我们应启动一个Service来监听电话并进行处理 二.加入AIDL文件 Android没有对外

  • Android应用开发:电话监听和录音代码示例

    在oncreate 中执行: 复制代码 代码如下: public void onCreate() {  super.onCreate();  Log.i("TAG", "服务启动了"); // 对电话的来电状态进行监听  TelephonyManager telManager = (TelephonyManager) this    .getSystemService(Context.TELEPHONY_SERVICE);  // 注册一个监听器对电话状态进行监听 

  • Android实现拍照、录像、录音代码范例

    本文主要介绍Android实现拍照.录像.录音代码的资料,这里整理了详细的代码,有需要的小伙伴可以参考下. RecordActivity.java package com.cons.dcg.collect; import java.io.File; import java.text.SimpleDateFormat; import java.util.*; import android.app.*; import android.content.Intent; import android.da

  • Android录音应用实例教程

    本文以实例形式较为详细的展示了Android录音的实现方法,分享给大家供大家参考之用.具体方法如下: 首先是xml布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" andr

  • Android录音时获取分贝值的方法代码实例

    参考文章Android中实时获取音量分贝值详解:http://www.jb51.net/article/64806.htm public class MediaRecorderDemo { private final String TAG = "MediaRecord"; private MediaRecorder mMediaRecorder; public static final int MAX_LENGTH = 1000 * 60 * 10;// 最大录音时长1000*60*1

  • android编程实现电话录音的方法

    本文实例讲述了android编程实现电话录音的方法.分享给大家供大家参考.具体如下: 在清单文件AndroidManifest.xml中添加权限: <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!-- 在SDCard中创建与删除文件权限 --> <uses-permission android:name="android.permission.MOUN

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

    本文实例讲述了Android编程实现通话录音功能的方法.分享给大家供大家参考,具体如下: 因受系统限制,只能录自已麦的声音,录不到对方的声音,可能需要改内核才能实现双向录音: 接通电话和挂断电话时,震动一下: 使用广播接收者实现自启动: 服务代码: package com.eboy.phoneListener; import java.io.File; import android.app.Service; import android.content.Context; import andro

  • Android实现录音功能实现实例(MediaRecorder)

    本文介绍了Android实现录音的实例代码(MediaRecorder),分享给大家,具体如下: Android提供了两个API用于录音的实现:MediaRecorder 和 AudioRecord,各有优劣. 1.MediaRecorder 已经集成了录音.编码.压缩等,支持少量的录音音频格式,大概有.aac(API = 16) .amr .3gp 优点:大部分已经集成,直接调用相关接口即可,代码量小 缺点:无法实时处理音频:输出的音频格式不是很多,例如没有输出mp3格式文件 2.AudioR

  • Android编程开发录音和播放录音简单示例

    本文实例讲述了Android编程开发录音和播放录音的方法.分享给大家供大家参考,具体如下: /* * The application needs to have the permission to write to external storage * if the output file is written to the external storage, and also the * permission to record audio. These permissions must be

  • Android实现自制和播放录音程序

    首先,让我们先看下实现的截图: 当有录音文件存在时,会显示在下面的ListView当中. 下面给出实现的完整代码: 1.主程序代码 package irdc.ex07_11; import java.io.File; import java.io.IOException; import java.util.ArrayList; import android.app.Activity; import android.content.Intent; import android.media.Medi

  • Android 实现电话来去自动录音的功能

    我们在使用Android手机打电话时,有时可能会需要对来去电通话自动录音,本文就详细讲解实现Android来去电通话自动录音的方法,大家按照文中的方法编写程序就可以完成此功能. 来去电自动录音的关键在于如何监听手机电话状态的转变: 1)来电的状态的转换如下(红色标记是我们要用到的状态) 空闲(IDEL)--> 响铃(RINGING)--> 接听(ACTIVE)--> 挂断(经历DISCONNECTING--DISCONNECTED)--> 空闲(IDEL) 或者  空闲(IDEL)

  • Android实现的截屏小程序示例

    本文实例讲述了Android实现的截屏小程序.分享给大家供大家参考,具体如下: 先看截图,不过这个截屏还不够完整,头上的statusbar没有,呈黑色. 多按了几次,就成这样了,呵呵. package com.test; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Bitmap.Config; import

  • Android实现简单音乐播放器(MediaPlayer)

    Android实现简单音乐播放器(MediaPlayer),供大家参考,具体内容如下 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个简单的音乐播放器,要求功能有: 播放.暂停功能: 进度条显示播放进度功能 拖动进度条改变进度功能: 后台播放功能: 停止功能: 退出功能: 代码实现 导入歌曲到手机SD卡的Music目录中,这里我导入了4首歌曲:仙剑六里面的<誓言成晖>.<剑客不能说>.<镜中人>和<

  • Android开发之媒体播放工具类完整示例

    本文实例讲述了Android开发之媒体播放工具类.分享给大家供大家参考,具体如下: package com.maobang.imsdk.util; import android.media.MediaPlayer; import android.net.Uri; import android.util.Log; import java.io.FileInputStream; import java.io.IOException; import com.maobang.imsdk.app.IMAp

  • Android Studio实现音乐播放器

    Androidstudio音乐播放器,供大家参考,具体内容如下 实现目的:利用广播在myapplication中原本button点我暂停按钮是灰色无法点击的,此时发送一条短信给自己的安卓手机,按钮变成黑色,音乐开始播放,此时点击 点我暂停 按钮,音乐停止. 结果截图: 发送短信给自己后:,点我暂停 按钮变成黑色,并开始播放音乐: 此时点击点我暂停按钮,音乐暂停 广播 Android 应用与 Android 系统和其他 Android 应用之间可以相互收发广播消息,这与发布-订阅设计模式相似.这些

  • Android Studio实现音乐播放器的全过程(简单易上手)

    目录 前言 一.项目概述 1.需求分析 2.设计分析 3.资源文件分析 二.开发环境 三.准备工具 四.详细设计 1.搭建主界面布局 2.创建服务类 2.1.服务概述 2.2.服务的创建 2.3.服务的启动方式 2.4.服务的生命周期 3.搭建音乐播放界面布局 4.搭建音乐列表界面布局 5.搭建专辑界面布局 6.导入资源文件 五.项目效果 1.创建模拟器 2.运行演示 六.项目总结 附如何将图片剪成圆形 前言 我们大家平时长时间打代码的时候肯定会感到疲惫和乏味,这个时候一边播放自己喜欢的音乐,一

  • Android实现微信自动抢红包的程序

    简单实现了微信自动抢红包的服务,原理就是根据关键字找到相应的View, 然后自动点击.主要是用到AccessibilityService这个辅助服务,基本可以满足自动抢红包的功能,但是有些逻辑需要优化,比如,拆完一个红包后,必须手动点击返回键,才能进行下一次自动抢红包. AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="h

  • Android MediaPlayer实现音乐播放器实例代码

    Android MediaPlayer实现音乐播放器 1.布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height=&qu

随机推荐