2017-02-16 11 views
0

Я просто пытаюсь сфотографировать камеру, и я имею дело с разрешениями, отладчик возвращает java.io.IOException: Permission denied, но я не могу определить ошибку.Доступ к камерам для Android запрещен

Здесь кнопка камеры вызова:

btn_cam.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       camera = new CameraPicture(getApplicationContext(), 10, 15); 
       String[] permissionRequested = {Manifest.permission.CAMERA}; 
       requestPermissions(permissionRequested, camera.getPermissionRequest()); 
      } 
     }); 
    } 

Вот интересный кусок кода CameraPicture класса обработки камеры:

public CameraPicture(Context context, int act_res_req_num, int perm_req_num) { 
     this.context = context; 
     this.cam_activity_result_req_num = act_res_req_num; 
     this.cam_perm_req_num = perm_req_num; 
    } 

public Intent takePhotoIntent() throws IOException { 
     File photoFile; 
     Intent in = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     if (in.resolveActivity(this.context.getPackageManager()) != null && (photoFile = this.createImageFile()) != null) { 
      in.putExtra("output", (Parcelable)Uri.fromFile((File)photoFile)); 
     } 
     return in; 
    } 


    private File createImageFile() throws IOException { 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     String imageFileName = "JPEG_" + timeStamp + "_"; 
     File storageDir = Environment.getExternalStoragePublicDirectory((String)Environment.DIRECTORY_PICTURES); 
     File image = File.createTempFile(imageFileName, ".jpg", storageDir); 
     this.photoPath = image.getAbsolutePath(); 
     return image; 
    } 

А вот метод разрешения, который, кажется, чтобы поймать исключение:

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     if ((requestCode==camera.getPermissionRequest()) && (grantResults[0]==PackageManager.PERMISSION_GRANTED)){ 
      try { 
       startActivityForResult(camera.takePhotoIntent(), camera.getActResultRequest()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
       System.out.println("ERROR MESSAGE: "+e); 
       Toast.makeText(getApplicationContext(),"Error taking the picture ",Toast.LENGTH_LONG).show(); 
      } 
     }else{ 
      Toast.makeText(getApplicationContext(),"Unable to accesss the camera without permission",Toast.LENGTH_LONG).show(); 
     } 
    } 

Вы видите что-то не так?

EDIT: забыл показать часть манифеста

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

<application 
    android:allowBackup="true" 
+0

изменение этой Manifest.permission.CAMERA в android.Manifest.permission.CAMERA –

+0

вставить манифест пожалуйста .check разрешение в манифесте –

+1

Вы добавили в манифесте? – Akshay

ответ

1

Попробуйте это,

private static final int REQUEST_CAMERA = 112; 

    btn_cam.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        if (Build.VERSION.SDK_INT >= 23) { 
         String[] PERMISSIONS = {android.Manifest.permission.CAMERA}; 
         if (!hasPermissions(mContext, PERMISSIONS)) { 
          ActivityCompat.requestPermissions((Activity) mContext, PERMISSIONS, REQUEST_CAMERAE); 
         } else { 
          camera = new CameraPicture(getApplicationContext(), 10, 15); 
          //open camera 
         } 
        } else { 
         camera = new CameraPicture(getApplicationContext(), 10, 15); 
         //open camera 
        } 
       } 
      }); 
     } 

    /*get Permissions Result*/ 
    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     switch (requestCode) { 
      case REQUEST_CAMERA: { 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        camera = new CameraPicture(getApplicationContext(), 10, 15); 
        //open camera 
       } 
      } 
     } 
    } 

     /*check permissions for marshmallow*/ 

    private static boolean hasPermissions(Context context, String... permissions) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) { 
      for (String permission : permissions) { 
       if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) { 
        return false; 
       } 
      } 
     } 
     return true; 
    } 
+0

Спасибо! попробует! – codeKiller

+0

в вашем коде попытайтесь вызвать camera = new CameraPicture (getApplicationContext(), 10, 15); в onRequestPermissionsResult и удалите из onclick.Aslo проверьте if (Build.VERSION.SDK_INT> = 23) – user2025187