【问题标题】:Ask for permissions with API 22 Android使用 API 22 Android 请求权限
【发布时间】:2016-07-03 13:48:05
【问题描述】:

在我正在工作的项目中,我们有一组权限,其中 3 个被标记为dangerous。在Android

所以,在谷歌搜索权限,我到达了谷歌文档页面,在那里讨论如何请求它:http://developer.android.com/intl/es/training/permissions/requesting.html

他们使用这个代码。

if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) { ... }

ContextCompat.CheckSelfPermission(..) 仅在 API 23 中。

但问题在于,对于项目中的某些规范(老板等),我们无法升级到 API 23,以使用包含此方法的库兼容。

所以我的问题是:

有什么方法可以处理权限的请求,做一些变通?

权限:

<uses-permission android:name="xx.xx.otr.app.providers.imps.permission.READ_ONLY" />
    <uses-permission android:name="xx.xx.otr.app.providers.imps.permission.WRITE_ONLY" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="es.in2.otr.app.im.permission.IM_SERVICE" />
    <uses-permission android:name="android.permission.UPDATE_APP_OPS_STATS" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />

    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

    <permission
        android:name="xx.xx.otr.app.im.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />

    <uses-permission android:name="xx.xx.otr.app.im.permission.C2D_MESSAGE" />

    <permission
        android:name="xx.xx.otr.app.im.permission.IM_SERVICE"
        android:description="@string/perm_desc"
        android:label="@string/perm_label"
        android:permissionGroup="android.permission-group.MESSAGES"
        android:protectionLevel="dangerous" />
    <permission
        android:name="xx.xx.otr.app.providers.imps.permission.READ_ONLY"
        android:description="@string/ro_perm_desc"
        android:label="@string/ro_perm_label"
        android:permissionGroup="android.permission-group.MESSAGES"
        android:protectionLevel="dangerous" />
    <permission
        android:name="xx.xx.otr.app.providers.imps.permission.WRITE_ONLY"
        android:description="@string/wo_perm_desc"
        android:label="@string/wo_perm_label"
        android:permissionGroup="android.permission-group.MESSAGES"
        android:protectionLevel="dangerous" />

【问题讨论】:

  • 设置 targetSdkVersion 22 并且不要询问运行时权限然后检查它会很好。其他你可以检查android的版本并相应地请求权限。我找到了一个在运行时请求权限的漂亮教程。阅读它你会知道该怎么做coderzpassion.com/android-new-runtime-permissions

标签: android android-permissions android-6.0-marshmallow


【解决方案1】:

看看这个链接

“管理运行时权限最简单的方法是使用第三方库” PermissionsDispatcher 是专门为危险权限开发的

https://guides.codepath.com/android/Managing-Runtime-Permissions-with-PermissionsDispatcher

【讨论】:

    【解决方案2】:

    如下请求你需要的权限,

    // Here, thisActivity is the current activity
    if (ContextCompat.checkSelfPermission(thisActivity,
                    Manifest.permission.READ_CONTACTS)
            != PackageManager.PERMISSION_GRANTED) {
    
        // Should we show an explanation?
        if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
                Manifest.permission.READ_CONTACTS)) {
    
            // Show an expanation to the user *asynchronously* -- don't block
            // this thread waiting for the user's response! After the user
            // sees the explanation, try again to request the permission.
    
        } else {
    
            // No explanation needed, we can request the permission.
    
            ActivityCompat.requestPermissions(thisActivity,
                    new String[]{Manifest.permission.READ_CONTACTS},
                    MY_PERMISSIONS_REQUEST_READ_CONTACTS);
    
            // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
            // app-defined int constant. The callback method gets the
            // result of the request.
        }
    }
    
    
    Get the response of the permission as follows, 
    @Override
    public void onRequestPermissionsResult(int requestCode,
            String permissions[], int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
    
                    // permission was granted, yay! Do the
                    // contacts-related task you need to do.
    
                } else {
    
                    // permission denied, boo! Disable the
                    // functionality that depends on this permission.
                }
                return;
            }
    
            // other 'case' lines to check for other
            // permissions this app might request
        }
    }
    

    有关它的更多详细信息,您可以参考谷歌开发者文档, http://developer.android.com/training/permissions/requesting.html

    希望这会对你有所帮助。

    【讨论】:

    • 问题是ContextCompat.checkSelfPermission 不在与 API 22 兼容的库中。如果我现在更改为 API 23,项目会由于我们正在等待开发人员改进它的一些库而崩溃。所以,我们必须为这个方法找到一些解决方法,(如果存在的话)
    • 能否发布您的崩溃日志?
    • 对不起,但是,没有崩溃日志,因为,是一个聊天应用,连接服务器,怎么做的,我们需要激活权限,但默认情况下是没有的,所以,应用程序,只是“尝试连接”。
    猜你喜欢
    • 2015-10-05
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多