2016-04-27 10 views
1

私はAndroidのアクセス許可を処理するためにGoogleのEasyPermissionsライブラリを使用しています。画像をキャプチャするためにボタンを初めてクリックすると、CAMERAWRITE_EXTERNAL_STORAGE結果の配信が失敗しました - ノンボールメソッドopenCameraを実行できません

私はあなたが以下を参照することができ、エラーメッセージを表示して、両方の権限アプリのクラッシュを受け入れた後:

E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: com.example.debug, PID: 22768 
        java.lang.RuntimeException: Failure delivering result ResultInfo{[email protected]:requestPermissions:, request=123, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {com.example.debug/com.example.camera.CameraActivity}: java.lang.RuntimeException: Cannot execute non-void method openCamera 
         at android.app.ActivityThread.deliverResults(ActivityThread.java:3699) 
         at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742) 
         at android.app.ActivityThread.-wrap16(ActivityThread.java) 
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) 
         at android.os.Handler.dispatchMessage(Handler.java:102) 
         at android.os.Looper.loop(Looper.java:148) 
         at android.app.ActivityThread.main(ActivityThread.java:5417) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
        Caused by: java.lang.RuntimeException: Cannot execute non-void method openCamera 
         at pub.devrel.easypermissions.EasyPermissions.runAnnotatedMethods(EasyPermissions.java:229) 
         at pub.devrel.easypermissions.EasyPermissions.onRequestPermissionsResult(EasyPermissions.java:186) 
         at com.example.camera.CameraActivity.onRequestPermissionsResult(CameraActivity.java:243) 
         at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:6553) 
         at android.app.Activity.dispatchActivityResult(Activity.java:6432) 
         at android.app.ActivityThread.deliverResults(ActivityThread.java:3695) 
         at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742)  
         at android.app.ActivityThread.-wrap16(ActivityThread.java)  
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393)  
         at android.os.Handler.dispatchMessage(Handler.java:102)  
         at android.os.Looper.loop(Looper.java:148)  
         at android.app.ActivityThread.main(ActivityThread.java:5417)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

openCamera()方法:

@Override 
@AfterPermissionGranted(RC_CAMERA_PERM) 
public void openCamera(int option) { 
    if (EasyPermissions.hasPermissions(this, Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { 
     // Have permission, do the thing! 
     Log.i(TAG, "openCamera Has Permissions "); 

     Intent intent; 

     switch (option) { 
      case RECORD_VIDEO : 
       intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
       intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, FIVE_MINS_IN_SECS); 
       startActivityForResult(intent, RECORD_VIDEO); 
       break; 
      case CAPTURE_IMAGE : 
       ContentValues values = new ContentValues(); 
       values.put(MediaStore.Images.Media.TITLE, "Image File name"); 
       mCapturedImageURI = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 

       intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       intent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI); 
       startActivityForResult(intent, CAPTURE_IMAGE); 
       break; 
      default: 
       Log.i(TAG, "openCamera wrong option "); 
       break; 
     } 

    } else { 
     // Ask for Camera permission 
     EasyPermissions.requestPermissions(this, getString(R.string.ask_camera_permission), 
       RC_CAMERA_PERM, Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE); 
    } 
} 

答えて

6

EasyPermissionを呼び出すことはできませんので、あなたはその例外を取得あなたのメソッドopenCameraそれはパラメータoptionを持っているので。 AfterPermissionGrantedで注釈が付けられたメソッドは、EasyPermissionが呼び出せるように、無効にする必要があります。

この状態は、明示的にEasyPermissionのソースで検証されています

// Method must be void so that we can invoke it 
if (method.getParameterTypes().length > 0) { 
    throw new RuntimeException("Cannot execute non-void method " + method.getName()); 
} 

あなたが方法openCameraから任意のパラメータを削除しなければならない問題を解決するには。

関連する問題