在安卓的6.0上对权限做了改进,让用户知道你的程序正在请求什么敏感的权限。那么程序就要做一个适配,在as的自动生成代码上活捉了一个权限请求的官方写法,这个写法在官方的文档上也是有的,也有很详细的介绍,我这里就做一个记录,至于什么权限需要这样写,什么权限不需要,这个去谷歌去吧,而且现在谷歌开发者的已经在中国有了cn域名,多多上去看看吧。
private boolean mayRequestContacts() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { return true; } if (checkSelfPermission(READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) { return true; } if (shouldShowRequestPermissionRationale(READ_CONTACTS)) { Snackbar.make(mEmailView, R.string.permission_rationale, Snackbar.LENGTH_INDEFINITE) .setAction(android.R.string.ok, new View.OnClickListener() { @Override @TargetApi(Build.VERSION_CODES.M) public void onClick(View v) { requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS); } }); } else { requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS); } return false; }
这个方法是需要override的,下面的注解还是写得挺清楚的
/** * Callback received when a permissions request has been completed. */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == REQUEST_READ_CONTACTS) { if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { populateAutoComplete(); } } }
private void populateAutoComplete() { if (!mayRequestContacts()) { return; } getLoaderManager().initLoader(0, null, this); }
这个是请求通讯录的一个例子,仿照来写就好了
如果大家有什么不明白的,想看看是怎么样的,可以到as上创建一个loginActivity就可以了,里面会有官方写好的代码。