java - 如何检测 MediaRecorder 是否被另一个应用程序使用?

标签 java android

我正在尝试检测 MediaRecorder 是否被其他应用程序使用,以停止我的记录器并继续供以后使用。我看到了 Android 的录音机应用程序,它确实可以实现我所说的功能,但是如何实现? 谢谢。

最佳答案

当另一个程序试图访问 MediaRecorder 时,您要么收到错误,要么崩溃。换句话说,您可以独占访问它。

您无法直接获取 MediaRecorder 的状态,但是您可以验证您是否正在录制。这是执行您想要的操作的代码:

package com.aplayer;

import java.io.IOException;

import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.widget.Toast;

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

        MediaRecorder 
        recorder = new MediaRecorder();
          recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
        recorder.setOutputFile("/sdcard/test.wav");

        try {
            recorder.prepare();

        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            Log.d("ERROR ","IllegalStateException");

            Toast msg = Toast.makeText(APlayerActivity.this, "IllegalStateException", Toast.LENGTH_LONG);
            msg.setGravity(Gravity.CENTER, msg.getXOffset() / 2, msg.getYOffset() / 2);
            msg.show();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            Log.d("ERROR ","IOException");
            e.printStackTrace();

            Toast msg = Toast.makeText(APlayerActivity.this, "IOException", Toast.LENGTH_LONG);
            msg.setGravity(Gravity.CENTER, msg.getXOffset() / 2, msg.getYOffset() / 2);
            msg.show();
        } 

        try {
        recorder.start();

        Toast msg = Toast.makeText(APlayerActivity.this, "Recording", Toast.LENGTH_LONG);
        msg.setGravity(Gravity.CENTER, msg.getXOffset() / 2, msg.getYOffset() / 2);
        msg.show();

        } catch (Exception e) {
        Log.e("ERROR", "start() failed");

        Toast msg = Toast.makeText(APlayerActivity.this, "Recording failed", Toast.LENGTH_LONG);
        msg.setGravity(Gravity.CENTER, msg.getXOffset() / 2, msg.getYOffset() / 2);
        msg.show();

        }

   }
}

关于java - 如何检测 MediaRecorder 是否被另一个应用程序使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11049546/

相关文章:

java - Play 框架中的静态方法与模板参数

java - Maven:在运行时访问 POM - 如何从任何地方获取 'pom.xml' 可用?

java - JLayer 暂停和恢复

java - 代码中有一些设计模式吗?

java - 将字符串缓冲区分成 80 个字符的 block

java - 日期选择器不适用于 API 26

android - Android 应用程序中的 Piwik 跟踪

android 对话框重力

android - 在 Media Player Android 上播放来自 MediaStore 的音频

android - 如何更新 Android 版本 2.3.6