2015-08-28 15 views
15

Như bạn có thể thấy từ tệp kê khai của tôi bên dưới, tôi đã thêm quyền, Tôi thiếu gì?Từ chối quyền đối với Android 6.0: yêu cầu quyền android.permission.WRITE_SETTINGS

<uses-permission-sdk-m android:name="android.permission.WRITE_SETTINGS" /> 
+0

https://developer.android.com/preview/features/runtime-permissions.html – Budius

+0

Tôi đã đọc nó. Phương thức requestPermissions() không hoạt động, tại sao? – Dobin

+0

có thể bạn nên kiểm tra xem sau đó: http://stackoverflow.com/help/on-topic và http://stackoverflow.com/help/dont-ask – Budius

Trả lời

4

Hóa ra bạn cần phải sử dụng một cơ chế khác nhau để được cấp WRITE_SETTINGS trong Android 6. requestPermissions không làm việc, nhưng CommonsGuy đã cung cấp một workaround ở đây: https://stackoverflow.com/a/32083622/238753

0

Đây là một trường hợp đặc biệt: mức độ phê duyệt: chữ ký,

Nếu ứng dụng nhắm mục tiêu cấp API 23 trở lên, người dùng ứng dụng phải cấp quyền rõ ràng cho ứng dụng thông qua màn hình quản lý quyền.

Ứng dụng yêu cầu phê duyệt của người dùng bằng cách gửi ý định có hành động ACTION_MANAGE_WRITE_SETTINGS.

Ứng dụng có thể kiểm tra xem nó có ủy quyền này hay không bằng cách gọi Settings.System.canWrite().

44

Trong API 23 ngừơi tiêu dùng cao hơn có ủy quyền bằng tay cho phép này, bạn có thể kiểm tra bằng cách calling- 'Settings.System.canWrite' dưới đây là việc thực hiện cho việc này: -

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
       if (Settings.System.canWrite(context)) { 
        // Do stuff here 
       } 
       else { 
        Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS); 
        intent.setData(Uri.parse("package:" + getActivity().getPackageName())); 
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        startActivity(intent); 
       } 
      } 
+3

Cách thực hiện tôi có thể xử lý kết quả của hoạt động trong điều kiện khác không? Làm cách nào để biết liệu ứng dụng của tôi có được cấp quyền không? – Mohammad

+3

@Mohammad bạn có thể kiểm tra lại trong '' '' onResume() '' '' – xorgate

+0

@xorgate Vâng, đúng vậy. Cảm ơn bạn! – Mohammad

3
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     if (!Settings.System.canWrite(getApplicationContext())) { 
      Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS, Uri.parse("package:" + getPackageName())); 
      startActivityForResult(intent, 200); 
     } 
    } 

này hoạt động như một sự quyến rũ.

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