当前位置: 首页 > 知识库问答 >
问题:

如何在提示[复制]时知道用户是否允许权限

曹疏珂
2023-03-14

当弹出权限对话框时,它会询问我是否要允许或拒绝某个权限。问题是,当我允许或拒绝时,动作不会执行。我如何知道他是否允许,以便我可以在接受时执行操作?

我试过:

int hasWriteExternalStoragePermission = ctx.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
    if (hasWriteExternalStoragePermission == PackageManager.PERMISSION_GRANTED) {
        // my code
    }

但它没有执行,因为“为时已晚”

共有3个答案

郑浩博
2023-03-14

请尝试以下方法:

public  boolean isStoragePermissionGranted() 
{
    if (Build.VERSION.SDK_INT >= 23) 
    {
        if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED) 
        {
            Log.v(TAG,"Permission is granted");
            return true;
        } 
        else 
        {

            Log.v(TAG,"Permission is revoked");
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
            return false;
        }
    }
    else 
    { 
        //permission is automatically granted on sdk<23 upon installation
        Log.v(TAG,"Permission is granted <23");
        return true;
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) 
{
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if(grantResults[0]== PackageManager.PERMISSION_GRANTED)
    {
        Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]);
        //resume tasks needing this permission
    }

   else
   {
       Log.v(TAG,"Permission denied");
   }
}

这样,如果获得许可,它会来到这里:

  • <代码>日志。v(标记“已授予许可”)

如果尚未授予权限,则会出现以下情况:

  • Log. v(TAG,“权限被撤销”);并尝试获取权限。

如果用户在运行时授予权限:

  • <代码>日志。v(标签“Permission:“permissions[0]”是“grantResults[0])

如果用户拒绝:

  • <代码>日志。v(标记“拒绝许可”)

如果版本低于Marshamla,即低于API 23,那么它会出现在这里:

  • Log. v(TAG,"授予权限

司空温书
2023-03-14

您需要重写此方法

@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
    }
}

链接到官方文档

司空繁
2023-03-14

您必须覆盖onRequest estPermissionsResult函数,您将获得权限对话框弹出的回调。

像下面

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
            } else {

                // permission denied
                // ask again or ignore

            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request
    }
}
 类似资料:
  • 问题内容: 我已经阅读了两天的信息和样本,但不确定此后是否完成了所有身份验证过程。 我怎么知道我是否已登录,例如,我将有一个带有登录或注销按钮的导航栏,下面是否有一些变量,如代码? 问题答案: 如果用户已登录,则将为中的每个请求创建一个对象,您可以检查任何中间件是否存在: 您可以为此创建简单的中间件,该中间件将检查用户是否已登录,如果没有,则将重定向到页面: 并使用它:

  • 问题内容: 当我使用mmap创建写时复制映射(MAP_PRIVATE)时,此映射的某些页面将在我写入特定地址后立即复制。在程序的某个时刻,我想弄清楚实际上已复制了哪些页面。有一个名为“ mincore”的调用,但仅报告该页面是否在内存中,这与正在复制的页面不同。 有什么办法可以确定哪些页面已被复制? 问题答案: 好的,按照MarkR的建议,我试了一下它来浏览pagemap和kpageflags界面

  • 我有一个简单的JavaFX应用程序,它允许用户查询数据库并查看表中的数据。 我使用的是标准的javafx.Scene.Control.TableView类。是否有一种简单的方法来启用单元格复制?我做了一些搜索,我看到其他人创建自定义菜单命令...我不想创建一个自定义菜单,我只想要基本的键盘复制与单细胞工作。 我使用的是单一选择模式,但如果需要,我可以更改为其他模式:

  • 我有两个域名。 我尝试使用JavaScript标记,在用户对域2进行一些操作之后,使用一切正常,但在最后一步,我得到了跨原点错误。 如何在PHP中允许访问域1上的跨源? 编辑 我的问题不是这个问题的可能重复,因为我问的是PHP。 解决方案 只需在打开PHP标签后的代码开头添加,这将允许从任何来源(网站)进行访问。 如果要限制访问,请将替换为源站(网站)url,如

  • 问题内容: 我有一个表格,基本上是上传一个文件。我要提交两次表格,第1次不包含多部分,第二次1次包含多部分。 但是我想先检查一下第一次提交表单是否成功,然后再进行第二次提交 引用@Vern后编辑 这是我的servlet部分。我在哪里确定它是否由多个部分组成。如果未将 resultType 存储到会话变量中,则返回, 现在,我要检查此“已 提交 ”或类似内容,然后第二次提交表格。 第二表单提交:在这

  • 如果all调用ActivityCompat.RequestPermissions(),则OS显示一个带有Deny或Permissions按钮的对话框。还有一个“永不再次显示这个”勾选框。 但是,我无法让应用程序知道用户是否勾选了这个框--在onRequestPermissionsResult()中,如果用户单击Deny,以及如果用户在单击Deny之前勾选了这个勾选框,那么grantResults参