如何再次询问权限?

问题描述 投票:1回答:3

我正在寻求将我的SQLite数据库复制到“外部”存储,作为备份我的数据库文件的一种方法。用户可以从那里获取.db文件并移动到一个安全的地方。

在跟随Android Developer documentation on getting permission到WRITE_EXTERNAL_STORAGE之后,我输入了逐字显示的代码,然后我用调试器逐步完成了它。 (我将READ_CONTACTS更改为WRITE_EXTERNAL_STORAGE)

它将首先检查SelfPermission并跳过shouldShowRequestPermissionRationale转到requestPermissions。然后我会收到一个警告弹出窗口,要求我的许可。

如果我拒绝它,它将在第二次运行时再次转到checkSelfPermission,然后转到shouldShowRequestPermissionRationale但跳过requestPermissions并终止不再请求权限,因为Android文档说它应该。

我的问题:

  1. 我是否应该在shouldShowRequestPermissionRationale if()块中添加对requestPermissions的调用以使其再次询问?或者还有另一种方式吗?
  2. 如果我想解释为什么需要权限的原因或理由,我是否应该实现自己的AlertDialog框?或者是否有一个set方法再次询问AlertBox我还没有发现系统提供我的解释?

到目前为止,我在编写此应用程序时所做的一切都是学习经验。我玩的很开心。

编辑:我确实有

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"  />

在我的Manafest中设置。

android file backup android-permissions android-external-storage
3个回答
0
投票

如何再次询问许可?

简短回答:是再问一次。

一些解释:您可以提供警告对话框或某些内容来说明您需要此权限的原因,也不需要每次都这样做,因为用户可以知道所需的权限取决于操作,但是,有一种方法我用来检查对于权限,它看起来像:

public class CheckPermissions {


public static boolean hasPermission(int PERMISSION_REQUEST, String permission, Context context) {
    if (ContextCompat.checkSelfPermission(context,
            permission)
            != PackageManager.PERMISSION_GRANTED) {

        // Should we show an explanation?
        if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context,
                permission)&&
                ContextCompat.checkSelfPermission(context,
                        permission)
                        != PackageManager.PERMISSION_GRANTED){

            return false;

        } else {

            ActivityCompat.requestPermissions((Activity) context,
                    new String[]{permission},
                    PERMISSION_REQUEST);

        }

        return false;
    } else {
        return true;


       }
    }
}

所以你可以在每次需要时检查。

 if (CheckPermissions.hasPermission(PERMISSION_REQUEST, Manifest.permission.YOUR_PERMISSION, context)){
// do some thing
}

0
投票

在基本原理回调中,你应该调用与以前相同的逻辑,只是添加一个用户应该真正的理由,真正允许这个权限:-)显示一个Toast或者一个AlertDialog,然后再次激活权限请求。如果您转到对话框,请在用户解除Dialog后请求权限。

如果用户再次拒绝,则不应再次请求。用户可以决定他们想要通过“设置”启用它,但一般来说他们认为你不值得获得许可:-(


0
投票

1-如果on the second run through表示用户在几秒钟之前被拒绝了您的许可请求,根据您的实施情况,您不需要在requestPermissions if()中直接调用shouldShowRequestPermissionRationale,因为用户拒绝了您的请求,您应该尊重他/她的决定。如果shouldShowRequestPermissionRationale返回真值,你可以简单地显示一些对话框/吐司或快餐栏来解释用户为什么需要此权限,你可以提供一些方法在该对话框/快餐栏内再次请求权限,例如grant access按钮来调用requestPermissions再次,但由于用户点击它是基于用户请求,并且不会在if()块内自动触发。如果shouldShowRequestPermissionRationale返回false,您只需更改应用程序的进程,使其可以在没有该权限的情况下继续进行,例如停止或显示禁用的视图,以便让用户知道,因为他/她的许可决定此功能不再可用。

2-您应该根据应用程序的设计在自定义用户界面视图上显示用户的权限请求原因。您可以使用警报对话框或零食栏。警报对话框很常见,但由于它们阻止了其他UI元素,因此从用户体验角度来看,它们不是建

你可以看一下google herehere提供的样本来源。我建议看一下这个questionits answer以及它的第一个评论,它可能会让你有一个很好的理解。

© www.soinside.com 2019 - 2024. All rights reserved.