Android M-MediaRecorder启动失败 [英] Android M - MediaRecorder start failed

查看:124
本文介绍了Android M-MediaRecorder启动失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

三星银河S6 edge 6.0.1可以正常工作,因此,也许不是Android M在这里.

Samsung galaxy S6 edge 6.0.1 works fine, so maybe Android M is not the factor here.

首先,给出了Android 6.0+的权限,所以情况并非如此.

First off, the Android 6.0+ permissions are given, so that's not the case .

是这里:

    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
        //нужно проверять пермишны
        if (ContextCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.CAMERA)
        != PackageManager.PERMISSION_GRANTED || 
        ContextCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.RECORD_AUDIO)
        != PackageManager.PERMISSION_GRANTED ||
        ContextCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.READ_EXTERNAL_STORAGE)
        != PackageManager.PERMISSION_GRANTED ||
        ContextCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE)
        != PackageManager.PERMISSION_GRANTED ||
        ContextCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.ACCESS_NETWORK_STATE)
        != PackageManager.PERMISSION_GRANTED ||
        ContextCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.INTERNET)
        != PackageManager.PERMISSION_GRANTED) {


                ActivityCompat.requestPermissions(MainActivity.this,
                   new String[]{Manifest.permission.CAMERA,Manifest.permission.RECORD_AUDIO,Manifest.permission.INTERNET,Manifest.permission.ACCESS_NETWORK_STATE,Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE},
                        PERMISSIONS_REQUEST);           

        }
    }

我已经在其他设备上测试了我的应用,并且运行良好,但是在Nexus 5(锤头)上,调用MediaRecorder.start()时出现了错误,我对此不知该怎么办

I've tested my app on other devices and it works fine, but on Nexus 5 (hammerhead) I've got an error when MediaRecorder.start() is called and I don't know much what to do with that.

stacktrace很简单:

The stacktrace is as simple as :

java.lang.RuntimeException: start failed.
    at android.media.MediaRecorder.start(Native Method)
    at com.vladdrummer.headsup.ScreenVideoRecorder.record(ScreenVideoRecorder.java:94)

因此,没有太多信息.这是代码,但是请记住,它在其他设备上工作

So, not too much info. Here's the code, but keep in mind , it Works on other devices

private  Camera camera;
...
 camera.setPreviewDisplay(holder);
                  camera.startPreview();
                  isPrepared = prepareVideoRecorder();
..
    private boolean prepareVideoRecorder() {
        try{

        camera.unlock();

        mediaRecorder = new MediaRecorder();

        mediaRecorder.setCamera(camera);
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
        mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        mediaRecorder.setProfile(CamcorderProfile
            .get(CamcorderProfile.QUALITY_HIGH));
        String path = A.getRawGameVideoPath();//4 debug purposes
        mediaRecorder.setOutputFile(path);
        mediaRecorder.setPreviewDisplay(surfaceView.getHolder().getSurface());
        }
        catch (Exception e){
            e.printStackTrace();
            return false;
        }
        try {
          mediaRecorder.prepare();
        } catch (Exception e) {
          e.printStackTrace();
          release();
          return false;
        }
        return true;
      }

      public void record(){
          if (isPrepared){        
          mediaRecorder.start(); // Here where it crashes on Android M
          }
      }

当然,它也可能在其他设备上崩溃,我只在3个设备上进行了测试

Of course, it may be crashing on other devices as well, I tested it on 3 devices only

推荐答案

对于android M,您需要添加运行时权限,例如Camera,Audio 试试吧,这可能对您有帮助

For android M You need to add Runtime Permission like Camera,Audio Try This it may be help to you

private static final int MY_PERMISSIONS_REQUEST = 11;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (mContext.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
    requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO},
            MY_PERMISSIONS_REQUEST);
} else {
    Log.d("TAG", "Already granted access");
    initializeView(v);
}
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
switch (requestCode) {
    case MY_PERMISSIONS_REQUEST: {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Log.d("TAG", "Permission Granted");
            initializeView(v);
        } else {
            Log.d("TAG", "Permission Failed");
            Toast.makeText(getActivity().getBaseContext(), "You must allow permission record audio to your mobile device.", Toast.LENGTH_SHORT).show();
            getActivity().finish();
        }
    }
    // Add additional cases for other permissions you may have asked for
}
  }

这篇关于Android M-MediaRecorder启动失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆