您的位置:首页 > 编程语言 > Go语言

Google 运行时请求权限处理

2017-12-13 18:26 387 查看
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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息