Android M 權限設定方式

http://developer.android.com/intl/zh-tw/training/permissions/requesting.html

  • App所使用的權限,改成App執行時給予而非安裝時詢問。
  • User可更彈性控制權限,假設App需要Cameralocation兩個權限,User可只給予Camera(6.0之前的版本只能一次全部給予)
  • 權限將分為NormalDangerous兩類
    • Normal:對於User沒有直接的隱私問題,當宣告在manifest後將會自動給予權限
    • Dangerous:需要由User主動給予權限才可使用
  • 5.0以前的版本,若user拒絕某些dangerous的權限,app將無法安裝
  • 6.0以後的版本,app將可安裝,在執行後需要權限時,APP將要求user給予

Check For Permissions

  • 藉由下述code,確認是否擁有權限
    • SuccessPackageManager.PERMISSION_GRANTED
    • DeniedPackageManager.PERMISSION_DENIED

// Assume thisActivity is the current activity
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
        Manifest.permission.WRITE_CALENDAR);

if (ContextCompat.checkSelfPermission(thisActivity,

                Manifest.permission.READ_CONTACTS)

        != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?

    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,

            Manifest.permission.READ_CONTACTS)) {

        // User解釋要求權限之原因,請user同意

    } else {

        // No explanation needed, we can request the permission.

        ActivityCompat.requestPermissions(thisActivity,

                new String[]{Manifest.permission.READ_CONTACTS},

                MY_PERMISSIONS_REQUEST_READ_CONTACTS);

    }

Handle the permissions request response

  • user有回應權限之請求後,將會call onRequestPermissionsResult()callback methods
  • App將需要Overridemethods,以便處理user的回應
@Override

public void onRequestPermissionsResult(int requestCode,

        String permissions[], int[] grantResults) {

    switch (requestCode) {

        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {

            // If request is cancelled, the result arrays are empty.

            if (grantResults.length > 0

                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // permission was granted, yay! Do the

                // contacts-related task you need to do.

            } else {

                // permission denied, boo! Disable the

                // functionality that depends on this permission.

            }

            return;

        }

        // other 'case' lines to check for other

        // permissions this app might request

    }

}
  • App需要多個Dangerous的權限,例如一開始需要READ_CONTACTS,而之後需要WRITE_CONTACTS,其屬於同一個group第二個WRITE_CONTACTS就不需要再詢問

Permission Group可參閱:http://developer.android.com/intl/zh-tw/guide/topics/security/permissions.html#perm-groups

  • 倘若User已經勾選不再詢問,將會回傳上一次的結果(always true or false),詢問的Dialog不一定會出現

 

 

文章標籤
全站熱搜
創作者介紹
創作者 y23462001 的頭像
y23462001

y23462001的部落格

y23462001 發表在 痞客邦 留言(1) 人氣(605)