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();
}
}