5

Hiện nay tôi có các phương pháp sau đây để kiểm tra cho phép thời gian chạy trong AppCompatActivity cho Marshmallow:Trường hợp sử dụng cho ContextCompat.checkSelfPermission là gì?

if(Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) { 
    boolean hasPermission = checkSelfPermission(Manifest.permission.XX) 
       == PackageManager.PERMISSION_GRANTED; 
    if(!hasPermission) { 
     if(shouldShowRequestPermissionRationale(Manifest.permission.XX)) { 
      // explain reason for permission, try again 

     } else { 
      // user deny with "don't show again" 
     } 
    } 
} 

Cho đến nay tôi thấy nó hoạt động khá tốt cho Marshmallow. Tuy nhiên, tôi có nên lo lắng về sự cho phép trong các phiên bản trước M mà tôi nên sử dụng ContextCompat.checkSelfPermission() thay thế không? Tôi biết quyền trong M trước có thể được sửa đổi bằng cách sử dụng Xposed hoặc khuôn khổ tương tự, điều đó có nghĩa là ContextCompat.checkSelfPermission() có thể phát hiện đủ sự từ chối quyền do Xposed vv không?

+0

thông tin hữu ích bổ sung [tại đây] (https://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en) –

Trả lời

2

Tùy thuộc vào việc triển khai trình chặn quyền (ví dụ: thông qua Xposed) hoặc ứng dụng được cung cấp dữ liệu giả hoặc quá trình của ứng dụng sẽ bị thu hồi quyền.

Bạn sẽ không thể phát hiện xem ứng dụng có nhận dữ liệu giả hay không, nhưng trong trường hợp đó, ứng dụng của bạn sẽ ít nhất không bị lỗi.

Nếu giấy phép bị thu hồi ở cấp quá trình, thì ContextCompat.checkSelfPermission() có thể phát hiện ngay cả trên tiền M và trả lại PERMISSION_DENIED. Lưu ý rằng nếu bạn sử dụng phương pháp ContextCompat, bạn cũng phải sử dụng các phương thức ActivityCompat.shouldShowRequestPermissionRationale()ActivityCompat.requestPermissions() hoặc các phiên bản FragmentCompat của chúng.

Xem tại đây để biết thêm chi tiết: Support library methods for handling permissions.

+1

Vậy chúng ta nên làm gì sử dụng? – Zapnologica

+0

Xin lỗi! Tôi không hiểu. Trình độ? ý của bạn là gì 'ngay cả trên tiền M và trả về PERMISSION_DENIED'? Có sự cho phép tồn tại trên tiền M? – Wizard

Các vấn đề liên quan