2016-06-06 20 views
1

Samsung Galaxy S6 Rand 6.0.1 funktioniert gut, so vielleicht Android M ist nicht der Faktor hier.Android M - MediaRecorder Start fehlgeschlagen

Zunächst einmal, die Android 6.0 + Berechtigungen sind gegeben, so ist das nicht der Fall.

Hier ist sie:

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);   

     } 
    } 

ich meine App auf anderen Geräten getestet haben und es funktioniert gut, aber auf Nexus 5 (Hammerhai) Ich habe einen Fehler bekam, als MediaRecorder.start() aufgerufen wird und ich weiß nicht viel, was ich damit machen soll.

Der Stacktrace ist so einfach wie:

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

Also, nicht zu viel Information. Hier ist der Code, aber im Kopf behalten, es auf anderen Geräten funktioniert

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 
      } 
     } 

Natürlich kann es auch auf anderen Geräten Absturz sein, Getestet habe ich es auf 3 Geräte nur

Antwort

0

für Android M Sie müssen Runtime Permission wie Camera,Audio versuchen dieses Add es Ihnen

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 
} 
    } 
+0

Es tut mir leid, das ist nicht der Fall, ich habe diese Berechtigungen in Runtime gegeben – user2976267

-2

helfen können versuchen, diese:

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ 
    if (ContextCompat.checkSelfPermission(this, 
      Manifest.permission.CAMERA) 
    != PackageManager.PERMISSION_GRANTED || 
    ContextCompat.checkSelfPermission(this, 
      Manifest.permission.RECORD_AUDIO) 
    != PackageManager.PERMISSION_GRANTED || 
    ContextCompat.checkSelfPermission(this, 
      Manifest.permission.READ_EXTERNAL_STORAGE) 
    != PackageManager.PERMISSION_GRANTED || 
    ContextCompat.checkSelfPermission(this, 
      Manifest.permission.WRITE_EXTERNAL_STORAGE) 
    != PackageManager.PERMISSION_GRANTED || 
    ContextCompat.checkSelfPermission(this, 
      Manifest.permission.ACCESS_NETWORK_STATE) 
    != PackageManager.PERMISSION_GRANTED || 
    ContextCompat.checkSelfPermission(this, 
      Manifest.permission.INTERNET) 
    != PackageManager.PERMISSION_GRANTED) { 

      ActivityCompat.requestPermissions(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}, 
        0); 
    } 
}