Google 7.0版本開始,需要在代碼中加入權限檢查。否則,就無法上Google Play商店。
相關文檔:https://developer.android.com/training/permissions/requesting.html
不過,文檔十分含糊,不踩幾個坑是不可能搞清楚的。
在此我列出相關API,並加以說明
ActivityCompat.requestPermissions 請求權限,如果部分權限需要用戶確認,就好彈出系統消息框,確認是否 開啓權限。
Activity.onRequestPermissionsResult 請求權限結果回調接口,需要在主Activity中實現。
ContextCompat.checkSelfPermission 檢查是否有請求
Activity.shouldShowRequestPermissionRationale 檢查是否點選了“禁止後不再詢問”選項。
以下爲參考代碼
public class MainActivity extends NativeActivity
{
private static final int PERMISSION_REQUEST_CODE = 200;
//需要檢查的權限列表
private static final String[] permissions = new String[]
{
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.READ_PHONE_STATE",
"android.permission.SEND_SMS",
"android.permission.GET_ACCOUNTS",
"android.permission.RECEIVE_SMS",
};
@Override
protected void onCreate(Bundle savedInstanceState)
{
//檢查權限
requestPermissions(permissions);
super.onCreate();
}
/**
* 權限檢查函數
*/
private void requestPermissions(String[] permissions)
{
if(permissions == null || permissions.length == 0)
return;
ActivityCompat.requestPermissions(this, permissions, PERMISSION_REQUEST_CODE);
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
Log.d("SiriusActivity", "onRequestPermissionsResult requestCode="+requestCode);
switch (requestCode) {
case PERMISSION_REQUEST_CODE:
if (grantResults.length > 0)
{
//定義拒絕權限數
int deny_count = 0;
//挑出被拒絕的權限
for(int i=0; i<permissions.length; ++i)
{
if(grantResults[i] == PackageManager.PERMISSION_GRANTED)
//通過
Log.d("MainActivity", permissions[i] + " is GRANTED")
else
{
//權限被拒絕
Log.d("MainActivity", permissions[i] + " is DENIED")
deny_count += 1;
}
}
if(deny_count>0)
//有權限被拒絕
doFinishMessageBox();
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
/**
* 退出對話框
*/
private void doFinishMessageBox()
{
new AlertDialog.Builder(this)
.setMessage("警告\n" +
"有權限被拒絕啦!"
)
.setPositiveButton("確定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//退出
MainActivity.instance.finish();
}
})
.setCancelable(false)
.create()
.show();
}
}