首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与棉花糖权限系统混淆

与棉花糖权限系统混淆
EN

Stack Overflow用户
提问于 2016-02-18 19:12:31
回答 1查看 374关注 0票数 0

我的理解是,在任何涉及关键权限的操作之前,我必须检查该权限是否得到用户的允许,如果不是,则显示请求该权限的理由。然后我将在onRequestPermissionsResult回调方法中收集结果,等等。

但是使用Nexus 6p测试应用程序时,我发现在调用我的任何方法之前,该平台都会自动显示出一个基本原理。似乎仅仅是阅读平台的清单就是向用户展示了理由,所以,我不能理解是否值得检查和创建权限方法。或者,如果它是一个新的操作系统功能,这是过时的请求权限(我的手机运行的是6.0.1)。

下面是管理权限的代码:

代码语言:javascript
复制
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,就会立即要求用户授予所有权限。让所有的权限代码变得毫无意义。

宣言:

代码语言:javascript
复制
<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()时所展示的基本原理:

EN

回答 1

Stack Overflow用户

发布于 2016-02-24 21:29:10

在聊天中私下讨论的内容的摘要,供以后感兴趣的任何人使用:

  • 应用程序的这一部分是正确完成的,遵循安卓Marshmallow.
  • The中新Runtime Permission model的指导原则。问题是当应用程序启动时,四个权限请求被批量给出。
  • 问题不是提供的那部分代码,而是一个自写的库(供内部使用),它在第一次调用时要求所有权限。这样做是为了使库与quickly.
  • Solution:兼容,并在实际需要时重写库以请求权限,以便整个应用程序可以具有棉花糖预期的用户行为。

祝你好运:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35479828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档