2016-04-01 22 views
8

Tôi đến mới cho Android 6.0 Mã hóa Hãy Cung cấp một giải pháp Đối với mã bên dưới:Cách truy cập Máy ảnh trong Android 6.0 Marshmallow?

Khi tôi cung cấp Run Time Quyền thích READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE nó cho thấy một ngoại lệ như

java.lang.SecurityException : Quyền từ chối: bắt đầu Intent {act = android.media.action.IMAGE_CAPTURE flg = 0x3 cmp = com.motorola.camera/.Camera clip = {text/uri-list U: tệp: /// storage/emulated/0/Hình ảnh/MyAppNew% 20File% 20Upload/IMG_20160401_110234.jpg} (có phần bổ sung)} từ ProcessRecord {ed96564 26955: com.social.nocializer/u0a259} (pid = 26955, uid = 10259) với quyền thu hồi android.permissio n.CAMERA

Hoặc MediaStore.ACTION_IMAGE_CAPTUREMediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE Run Time Quyền không làm việc ...

Lưu ý: READ_EXTERNAL_STORAGE trình Đối Khi mở Gallery

+0

Vui lòng kiểm tra nó và thực hiện. http://developer.android.com/training/permissions/requesting.html – jinkal

+1

nhờ dude nó cung cấp các khái niệm chi tiết về thời gian chạy cho phép trong android 6.0 – jagan

Trả lời

17

Bạn phải quản lý cho phép thời gian chạy cho điều này, Vì bất kỳ quyền nào bạn đã xác định trong AndroidManifest sẽ không được tự động cấp. Vì vậy, phương pháp như dưới đây bạn có thể kiểm tra xem bạn cho phép được chấp nhận hay không

if (checkSelfPermission(Manifest.permission.CAMERA) 
     != PackageManager.PERMISSION_GRANTED) { 

    requestPermissions(new String[]{Manifest.permission.CAMERA}, 
      MY_REQUEST_CODE); 
} 

Ở đây, MY_REQUEST_CODE là một hằng số tĩnh mà bạn có thể xác định, mà sẽ được sử dụng một lần nữa cho callback thoại requestPermission. Bây giờ, bạn sẽ cần một callback cho kết quả thoại:

@Override 
public void onRequestPermissionResult(int requestCode, String[] permissions, int[] grantResults) { 
    if (requestCode == MY_REQUEST__CODE) { 
     if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      // Now user should be able to use camera 
     } 
     else { 
      // Your app will not have this permission. Turn off all functions 
      // that require this permission or it will force close like your 
      // original question 
     } 
    } 
} 
+2

Cảm ơn bạn Dude .... Hoạt động của nó hoàn hảo mà không có bất kỳ lỗi ... ThankYou So Much ...... – jagan

+2

@ Ronak Joshi .. Cảm ơn người đàn ông .. Bạn là HERO .. –

+1

@ Ronak Joshi .. Cảm ơn. Bạn đã lưu ngày của tôi – pratz9999

8

@Ronak Giải pháp làm việc cho tôi nhưng với một vài thay đổi sau, Như chúng ta cần phải kiểm tra về chỉ những thiết bị đó là trên Android M.

if(ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
         requestPermissions(new String[]{android.Manifest.permission.CAMERA}, 
           5); 
        } 
       } 

và ghi đè lên các phương pháp sau đây sử dụng CRL + o sao chép, dán sẽ có thể dẫn đến một lỗi: D

@Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     if (requestCode == 5) { 
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       // Now user should be able to use camera 
      } 
      else { 
       // Your app will not have this permission. Turn off all functions 
       // that require this permission or it will force close like your 
       // original question 
      } 
    } 
Các vấn đề liên quan