当前位置: 首页 > 知识库问答 >
问题:

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

盖昀
2023-03-14

我正在构建具有恢复/暂停功能的m4a录制的Android应用程序。可能吗?如果是,请告诉我解决方案。

谢谢

共有1个答案

施同
2023-03-14

如果您需要播放音频/视频资源,您可以使用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;
    }

}

播放器将被封装在片段/活动中。假设有一个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();
    }




}

请务必小心,在使用完媒体资源后,或在获得锁后活动/片段被销毁时,请释放媒体资源。如果不这样做,可能会影响其他应用程序或操作系统的行为。

显然,如果您需要更复杂的功能,您必须添加它们。这只是一个非常简单的播放器的示例。还要记住,可能的不兼容性可能会随着某种文件和/或设备而增加。

 类似资料:
  • 我相信答案是否定的,但是Twilio提供暂停/恢复录音的能力吗?用例是记录一个呼叫,但在收集敏感信息时暂停记录。从REST文档来看,它似乎不是一个受支持的功能。我想有人可能已经为这个要求找到了一些选择。

  • 问题内容: 我正在尝试在下载管理器中实现暂停/恢复,我在网上搜索并阅读了几篇文章,并根据它们更改了我的代码,但是恢复似乎无法正常工作,有什么想法吗? 问题答案: 好的问题已解决,这是我的其他想要实现暂停/恢复的用户的代码:

  • 我的目标是暂停录制文件。我在Android开发者网站上看到了它的但Media Recorder并没有暂停选项。 Java支持以编程方式合并两个音频文件,但在android中不起作用。 从Java中加入两个WAV文件? 而且我还使用了默认设备录音机应用程序,该应用程序适用于所有设备,但在三星中,很少有设备没有返回录制路径。 任何一个帮助语音录音暂停功能。

  • 问题内容: 我在viewDidAppear中有一个图像,并用以下代码对其进行了动画处理: 我想在点击时暂停动画,如果再次点击它则继续播放动画。 问题答案: 暂停和恢复动画的2个功能,我从这里开始转换为Swift。 我有一个按钮可以暂停或恢复在中初始化的动画:

  • 问题内容: 我有一个基本的Swing UI,带有一个标记为“播放”的按钮。按下按钮后,标签变为“暂停”。现在,当按下按钮时,它变为“继续”。 在“播放”中,我将实例化并执行一个SwingWorker。我想要的是能够暂停该线程(不要取消该线程),并根据上述按钮按下来恢复它。但是,我不想在doInBackground()中求助于Thread.sleep()。这似乎有点骇人听闻。有什么方法可以阻止运行d

  • 我要做的是暂停< code>KafkaConsumer,如果在使用消息的过程中出现错误。 这是我写的 然后我写了一个REST服务来恢复消费者 现在,我有两个问题。第一个问题:当我打电话给消费者时。来自<code>@KafkaListener</code>注释方法的pause()会发生什么?消费者立即暂停,或者我可以接收到同一主题分区的其他偏移量上的其他消息。例如,我有偏移量为3的“message1