国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android編程實現錄音及保存播放功能的方法【附demo源碼下載】

2019-10-22 18:16:01
字體:
來源:轉載
供稿:網友

本文實例講述了Android編程實現錄音保存播放功能的方法。分享給大家供大家參考,具體如下:

在android中進行錄音相對來說是比較簡單的,使用系統提供的MediaRecorder類進行錄音并保存,然后調用MediaPlayer進行播放。以下為xml配置文件代碼:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent"  tools:context="com.example.kk.soundrecording.MainActivity" >  <Button    android:id="@+id/start"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_centerHorizontal="true"    android:layout_marginTop="40dp"    android:text="@string/start" />  <Button    android:id="@+id/stop"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_below="@+id/start"    android:layout_centerHorizontal="true"    android:layout_marginTop="40dp"    android:text="@string/stop" />  <Button    android:id="@+id/paly"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_below="@+id/stop"    android:layout_centerHorizontal="true"    android:layout_marginTop="40dp"    android:text="@string/paly" />  <Button    android:id="@+id/pause_paly"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_below="@+id/paly"    android:layout_centerHorizontal="true"    android:layout_marginTop="40dp"    android:text="@string/pause_paly" />  <Button    android:id="@+id/stop_paly"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_below="@+id/pause_paly"    android:layout_centerHorizontal="true"    android:layout_marginTop="40dp"    android:text="@string/stop_paly" /></RelativeLayout>

在MainActivity中進行錄音,代碼如下:

package com.example.kk.soundrecording;import java.io.File;import java.io.IOException;import com.example.kk.util.RecordPlayer;import android.app.Activity;import android.media.MediaRecorder;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;/** * * @author kk * */public class MainActivity extends Activity implements OnClickListener {  // 開始錄音  private Button start;  // 停止按鈕  private Button stop;  // 播放按鈕  private Button paly;  // 暫停播放  private Button pause_paly;  // 停止播放  private Button stop_paly;  // 錄音類  private MediaRecorder mediaRecorder;  // 以文件的形式保存  private File recordFile;  private RecordPlayer player;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    recordFile = new File("/mnt/sdcard", "kk.amr");    initView();    Listener();  }  private void initView() {    start = (Button) findViewById(R.id.start);    stop = (Button) findViewById(R.id.stop);    paly = (Button) findViewById(R.id.paly);    pause_paly = (Button) findViewById(R.id.pause_paly);    stop_paly = (Button) findViewById(R.id.stop_paly);  }  private void Listener() {    start.setOnClickListener(this);    stop.setOnClickListener(this);    paly.setOnClickListener(this);    pause_paly.setOnClickListener(this);    stop_paly.setOnClickListener(this);  }  @Override  public void onClick(View v) {    player = new RecordPlayer(MainActivity.this);    int Id = v.getId();    switch (Id) {    case R.id.start:      startRecording();      break;    case R.id.stop:      stopRecording();      break;    case R.id.paly:      playRecording();      break;    case R.id.pause_paly:      pauseplayer();      break;    case R.id.stop_paly:      stopplayer();      break;    }  }  private void startRecording() {    mediaRecorder = new MediaRecorder();    // 判斷,若當前文件已存在,則刪除    if (recordFile.exists()) {      recordFile.delete();    }    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);    mediaRecorder.setOutputFile(recordFile.getAbsolutePath());    try {      // 準備好開始錄音      mediaRecorder.prepare();      mediaRecorder.start();    } catch (IllegalStateException e) {      // TODO Auto-generated catch block      e.printStackTrace();    } catch (IOException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }  }  private void stopRecording() {    if (recordFile != null) {      mediaRecorder.stop();      mediaRecorder.release();    }  }  private void playRecording() {    player.playRecordFile(recordFile);  }  private void pauseplayer() {    player.pausePalyer();  }  private void stopplayer() {    // TODO Auto-generated method stub    player.stopPalyer();  }}

同時,新建一個RecordPlayer類,用來播放保存好的錄音,如下:

package com.example.kk.util;import java.io.File;import android.content.Context;import android.media.MediaPlayer;import android.media.MediaPlayer.OnCompletionListener;import android.net.Uri;import android.util.Log;import android.widget.Toast;import com.example.kk.soundrecording.R;/** * * * @author kk  錄音播放類 * */public class RecordPlayer {  private static MediaPlayer mediaPlayer;  private Context mcontext;  public RecordPlayer(Context context) {    this.mcontext = context;  }  // 播放錄音文件  public void playRecordFile(File file) {    if (file.exists() && file != null) {      if (mediaPlayer == null) {        Uri uri = Uri.fromFile(file);        mediaPlayer = MediaPlayer.create(mcontext, uri);      }      mediaPlayer.start();      //監聽MediaPlayer播放完成      mediaPlayer.setOnCompletionListener(new OnCompletionListener() {        @Override        public void onCompletion(MediaPlayer paramMediaPlayer) {          // TODO Auto-generated method stub          //彈窗提示          Toast.makeText(mcontext,              mcontext.getResources().getString(R.string.ok),              Toast.LENGTH_SHORT).show();        }      });    }  }  // 暫停播放錄音  public void pausePalyer() {    if (mediaPlayer.isPlaying()) {      mediaPlayer.pause();      Log.e("TAG", "暫停播放");    }  }  // 停止播放錄音  public void stopPalyer() {    // 這里不調用stop(),調用seekto(0),把播放進度還原到最開始    if (mediaPlayer.isPlaying()) {      mediaPlayer.pause();      mediaPlayer.seekTo(0);      Log.e("TAG", "停止播放");    }  }}

此時,功能代碼都已實現,但是運行時會報錯!為什么呢,這個是被很多初學者會忘記的,那就是android開發中調用相應的功能時,必須在主配置文件中授予相應的權限,在配置文件中添加如下代碼:

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

附:Demo源碼點擊此處本站下載

希望本文所述對大家Android程序設計有所幫助。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 调兵山市| 子长县| 会同县| 宝山区| 嘉黎县| 岳普湖县| 股票| 平果县| 武威市| 兴业县| 新田县| 兴隆县| 辽阳县| 台安县| 金塔县| 庆城县| 海盐县| 孟村| 若羌县| 察隅县| 嘉义县| 无极县| 岫岩| 嘉定区| 资溪县| 高邮市| 璧山县| 佛教| 华亭县| 罗甸县| 聂拉木县| 浙江省| 阿勒泰市| 库车县| 朝阳区| 浦县| 宁河县| 宜阳县| 尉犁县| 英吉沙县| 高清|