2017-07-03 364 views
-5

需要根據android 6及以上標準檢查android應用程序用戶授予所需權限(特別是讀取用戶設備短信)。我特別尋找android開發人員網站上描述的ContextCompat.checkSelfPermission()方法。 在這裏看到: link如何使用ContextCompat.checkSelfPermission()檢查運行時的android應用程序權限?

+0

的可能的複製[如何請求在Android 6定位許可](https://stackoverflow.com/questions/40142331/how-to - 請求定位的許可上-機器人-6) –

回答

1
static final int PERMISSION_ALL = 1; 
String[] PERMISSIONS = 
     {Manifest.permission.ACCESS_COARSE_LOCATION, 
       Manifest.permission.ACCESS_FINE_LOCATION}; 

protected void runtimePermission() { 
    if (!hasPermission(ContactUS.this, PERMISSIONS)) { 
     ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL); 
    } 
} 

public static boolean hasPermission(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; 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    switch (requestCode) { 
     case PERMISSION_ALL: 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       //permission granted 
       //your logic here 
      } else { 
       //permission denied 
      } 
      break; 

    } 
} 
0

如果許可被授予:

checkSelfPermission(Manifest.permission.READ_CONTACTS) 

請求的權限,如果有必要

if (checkSelfPermission(Manifest.permission.READ_CONTACTS) 
      != PackageManager.PERMISSION_GRANTED) { 
     requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, 
       MY_PERMISSIONS_REQUEST_READ_CONTACTS); 

     /* MY_PERMISSIONS_REQUEST_READ_CONTACTS is an app-defined int constant */ 

     return; 
    } 

處理的權限請求響應

@Override 
public void onRequestPermissionsResult(int requestCode, 
     String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case MY_PERMISSIONS_REQUEST_READ_CONTACTS: { 
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       /* permission granted */ 

      } else { 

       /* permission denied */ 
      } 
      return; 
     } 

     /* check for other permissions */ 
    } 
} 

此外,你可以使用庫如this,無論如何祝你好運!

0

您可以添加運行時允許這樣 按照此步驟

第1步: - 首先在manifiest文件

android.Manifest.permission.ACCESS_FINE_LOCATION, 
android.Manifest.permission.ACCESS_COARSE_LOCATION, 

現在添加此權限,比

第2步:詢問運行時權限

String permission = android.Manifest.permission.ACCESS_FINE_LOCATION; 
     if (ActivityCompat.checkSelfPermission(SearchCityClass.this, permission) 
       != PackageManager.PERMISSION_GRANTED && ActivityCompat. 
       checkSelfPermission(SearchCityClass.this, android.Manifest.permission.ACCESS_COARSE_LOCATION) 
       != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(SearchCityClass.this, new String[] 
        {permission}, PERMISSION_GPS_CODE); 

     } 

步驟3:finallly處理permsiion結果在onRequestPermissionsResult

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, 
            @NonNull int[] grantResults) { 
super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
if (requestCode == PERMISSION_GPS_CODE) { 
    if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 


     Toast.makeText(this, location_permission_granted_msg, Toast.LENGTH_SHORT).show(); 

    } else { 

     Toast.makeText(this, location_permission_not_granted_msg, Toast.LENGTH_SHORT).show(); 
    } 
} 

} 
相關問題