android - 如何在Android中实现恢复/暂停录音?

标签 android audio mobile record

我正在构建使用恢复/暂停功能进行m4a录制的Android应用。
有可能吗?如果可以,请告诉我解决方法。

谢谢

最佳答案

如果需要播放音频/视频资源,则可以使用MediaPlayer对象,如果有特殊需要,可以包装它。特别是,要显示视频,需要SurfaceView及其支架。无论如何,它的工作原理如下:

假设您的媒体资源位于原始文件夹中,则媒体播放器可以是这样的:

import android.content.Context;
import android.media.MediaPlayer;

public class MyPlayer {

    private MediaPlayer mPlayer;
    private SurfaceHolder mSurfaceHolder;

    public void play(Context c) {

        if (mPlayer == null) {

            mPlayer = MediaPlayer.create(c, R.<YOUR RESOURCE NAME>);
            mPlayer.setDisplay(mSurfaceHolder);

            //Sets a listener to the mPlayer variable that set's it to null once the playing is finished
            mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

                @Override
                public void onCompletion(MediaPlayer mp) {
                        stop();
                }
            });

        }
        mPlayer.start();
    }

    public void pause() {
        if (mPlayer.isPlaying()) {
            mPlayer.pause();
        }
    }

    public void stop() {
        if (mPlayer != null) {
            mPlayer.release();
            mPlayer = null;
        }
    }

    public void setSurface(SurfaceHolder sh) {
      mSurfaceHolder = sh;
    }

}

播放器将封装在片段/ Activity 中。假设有一个XML布局,其中SurfaceView作为“屏幕”和三个用于媒体控制的按钮,您的片段将像:
public class PlayerFragment extends Fragment {

    private Button mPlayButton;
    private Button mPauseButton;
    private Button mStopButton;
    private SurfaceView mSurface;
    private SurfaceHolder mHolder;
    private MyPlayer mPlayer = new MyPlayer();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {

        //Gets the view and sets the player to be able to play a video resource
        View v = inflater.inflate(R.layout.<YOUR XML LAYOUT>, parent, false);
        mSurface = (SurfaceView) v.findViewById(R.id.surface);
        mHolder = mSurface.getHolder();
        mHolder.setKeepScreenOn(true);
        mPlayer.setSurface(mHolder);

        //Inflates the play button and sets on it a listener (created as an anonymous class)
        mPlayButton = (Button) v.findViewById(R.id.playButton);
        mPlayButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
            mPlayer.play(getActivity());    
            }
        });

        //Inflates the pause button and sets on it a listener (created as an anonymous class)
        mPauseButton = (Button) v.findViewById(R.id.pauseButton);
        mPauseButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                mPlayer.pause();    
            }
        });

        //Inflates the stop button and sets on it a listener (created as an anonymous class)
        mStopButton = (Button) v.findViewById(R.id.stopButton);
        mStopButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
            mPlayer.stop(); 
            }
        });

        return v;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mPlayer.stop();
    }




}

自从使用完媒体资源或 Activity /片段被破坏以来,请务必小心并释放它们,因为您已获得了锁定。如果不这样做,可能会损害其他应用程序或操作系统的行为。

显然,如果您需要更复杂的功能,则必须添加它们。这只是一个非常简单的玩家的例子。还请记住,某些文件和/或设备可能会引起不兼容。

关于android - 如何在Android中实现恢复/暂停录音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26723976/

相关文章:

css - bootstrap.css - 如何在移动时隐藏侧边栏?

android - 图像未在 android webview 中加载

flash - AS3 从音轨中间开始和停止音频

java - 如何告诉 Eclipse 使用来自不同库的不同版本的包进行构建?

javascript - 如何在桌面和移动网络上使用通用的 javascript 文件?

ios - iOS AVPlayer没有声音

java - 如何取消选择我的所有复选框

android - 用于相机预览的隐形 SurfaceView

android - 是否可以使用 drawable+color 作为背景?

java - IOException java 音频