我的理解是,在任何涉及关键权限的操作之前,我必须检查该权限是否得到用户的允许,如果不是,则显示请求该权限的理由。然后我将在onRequestPermissionsResult回调方法中收集结果,等等。
但是使用Nexus 6p测试应用程序时,我发现在调用我的任何方法之前,该平台都会自动显示出一个基本原理。似乎仅仅是阅读平台的清单就是向用户展示了理由,所以,我不能理解是否值得检查和创建权限方法。或者,如果它是一个新的操作系统功能,这是过时的请求权限(我的手机运行的是6.0.1)。
下面是管理权限的代码:
private void checkLocationPermission() {
if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
this.requestPermissions(new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, PermissionHelper.SMS_PERMISSION_IDENTIFIER);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case PermissionHelper.LOCATION_PERMISSION_IDENTIFIER: {
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getContext(), "Our app will be unable to locate you.", Toast.LENGTH_SHORT).show();
}
return;
}
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
break;
}
}但我关心的不是代码,而是平台似乎不需要这样做的事实。因为当应用程序刚启动时(但还没有达到任何权限的代码),只要读取AndroidManifest.xml,就会立即要求用户授予所有权限。让所有的权限代码变得毫无意义。
宣言:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- Internet access is required to show Google maps. -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- To use Google places -->
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<!-- These services require your GPS location. -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- To detect if an internet connection is available. -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- We would like to know your phone number. -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_SMS" />
<!-- To be reminded of insurance/MOT/servicing renewal then -->
<!-- we'll need to register those alarms on boot-up. -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!-- push notifications -->
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="ie.aaireland.android.theaa.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />以下是默认原理的屏幕截图:

这是执行getActivity()时所展示的基本原理:

发布于 2016-02-24 21:29:10
在聊天中私下讨论的内容的摘要,供以后感兴趣的任何人使用:
祝你好运:)
https://stackoverflow.com/questions/35479828
复制相似问题