如何在Android上运行时检查用户是否授予了权限?

2023-12-27

我创建了一个简单的 Android 活动,充当拨号盘。 它有一个电话号码的编辑文本和一个呼叫按钮 这是代码:(android 6.0 marshmallow)

public class Main2Activity extends AppCompatActivity {
EditText num;
Button call;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    num = (EditText) findViewById(R.id.num);
    call = (Button) findViewById(R.id.call);
    call.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try {
                // request permission if not granted
                if (ActivityCompat.checkSelfPermission(Main2Activity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(Main2Activity.this, new String[]{Manifest.permission.CALL_PHONE}, 123);
                    // i suppose that the user has granted the permission
                    Intent in = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + num.getText().toString()));
                    startActivity(in);
                 // if the permission is granted then ok
                } else {
                    Intent in = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + num.getText().toString()));
                    startActivity(in);
                }
            }
            // catch the exception if I try to make a call and the permission is not granted
            catch (Exception e){
            }
        }
    });
}

}

当我运行我的应用程序时,我遇到了这些问题

  • 如果我单击调用按钮并授予权限,则只有再次单击才会调用意图

  • 我不知道如何检查是否已授予权限


使用 onRequestPermissionResult,它处理用户按下的操作ALLOW and DENY,只需在“如果用户按允许”的条件下调用意图即可:

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode) {
        case 123: {
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //If user presses allow
                Toast.makeText(Main2Activity.this, "Permission granted!", Toast.LENGTH_SHORT).show();
                Intent in = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + num.getText().toString()));
                startActivity(in);
            } else {
                //If user presses deny
                Toast.makeText(Main2Activity.this, "Permission denied", Toast.LENGTH_SHORT).show();
            }
            break;
        }
    }
}

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Android上运行时检查用户是否授予了权限? 的相关文章

  • 使用 GoogleServices 插件时忽略 Gradle ArchivesBaseName

    我经常使用 archivesbasename 来重命名我的输出 apk 但自从使用 google services 插件后 它就被忽略了 我能做些什么来让它再次工作吗 下面附上了我完整的 build gradle 感谢您的指点 apply
  • Google Play 商店中基于服务的 Android 应用程序

    我正在开发一个应用程序 该应用程序仅包含一些服务 没有任何活动 即没有 UI 基本上 当用户在他 她的设备上安装应用程序时 我希望有 2 到 3 个服务在后台运行 对此我有几个疑问 应用程序安装后我的服务将如何启动 我的BroadcastR
  • 在代码中旋转按钮(或其中的文本)

    我必须通过编码随机旋转按钮 或里面的文本 它是相同的 API级别低于11是否有button setRotate x 好吧 看了一下 答案是 很复杂 您可以使用旧的动画框架旋转按钮 例如像这样 Button button Button fin
  • 编译后从字节代码中删除注释

    我们正在使用一个包含使用 JAXB 注释进行注释的 bean 的库 我们使用这些类的方式完全不依赖于 JAXB 换句话说 我们不需要 JAXB 也不依赖注释 但是 由于注释存在 它们最终会被处理注释的其他类引用 这要求我将 JAXB 捆绑到
  • 如何将 Android Instrumentation 测试推送到模拟器/设备?

    我正在尝试使用 Ubuntu 9 04 中的命令行 shell 在 Android 模拟器上运行 Webkit 布局测试 adb s emulator 5554 shell am instrument w com android dumpr
  • 维护 HttpUrlConnection 调用之间的会话(Native/Webview)

    让我从我做的开始desire 我想制作一个应用程序part native and part webviews Problem 维护本机和 webview 部分之间的会话 My 处理方法 this 我打算实现一个本机登录 其中我向用户展示两个
  • 游标索引越界异常

    打开后出现光标索引越界错误 数据库 请任何人告诉我如何打开现有数据库 sqllite Android 我想在数据库上触发一个选择查询 检索一些信息 public void getPatient SQLiteDatabase db Strin
  • android:进程和进程名称

    我试图理解android process属性 Ref says http developer android com guide topics manifest application element html proc 如果分配给该属性的
  • 在 Android 中始终以横向模式打开相机

    在我的 Android 应用程序中 单击按钮后我希望相机以横向模式打开 即使我将手机旋转为纵向模式 相机也应始终处于横向模式或纵向模式 使用此代码在横向模式下打开相机 Intent cameraIntent new Intent Media
  • 使用 RxJava 限制吞吐量

    我现在遇到的情况很难解释 所以我会写一个更简单的版本来解释这个问题 我有一个Observable from 它发出一系列由ArrayList文件数量 所有这些文件都应上传到服务器 为此 我有一个函数可以完成这项工作并返回一个Observab
  • 如何更改对话框片段内的片段

    我想做一个空的DialogFragment with a LinearLayout然后更改里面的片段LinearLayout 例如 第一个片段是 3 个按钮 facebook google 电子邮件登录 的登录 当有人按下电子邮件时 第 2
  • 如何使用 Swipe 视图实现 Android TabLayout 设计支持库

    我将使用 android TabLayout 设计支持库 但我不知道如何使用滑动视图 这是我的代码 XML
  • 收到“无法解析上传的APK的AndroidManifest.xml。它是否正确编译?”启用 Google 应用签名后出现错误

    启用后谷歌应用程序签名 https support google com googleplay android developer answer 7384423 hl en 每次我尝试将签名版本 APK 上传到 Play 商店时 都会收到一
  • 截图显示黑色

    我正在拍摄快照并创建缩略图 然后共享此图像 但缩略图显示全黑 我使用了以下代码 Bitmap bitmap View v1 v getRootView v1 setDrawingCacheEnabled true bitmap Bitmap
  • 使用 UPI url 调用 PSP 应用程序

    我正在尝试创建一个商家应用程序 它将根据 NPCI 的指南生成一个 url 此 url 将作为意图共享 并且 PSP 应用程序 任何注册的银行应用程序 应该能够侦听该 url 并被调用 我已经形成了这样的网址 upi pay pa icic
  • 有没有办法在多个嵌套的 RecyclerView 之间共享同一个 LayoutManager

    我正在开发一个显示游戏列表的应用程序 在每个游戏的 itemView 内 我还有一个要显示的视频列表 预览和结构如下 我部署了一个RecyclerView作为窗口根视图 然后对于视频 我使用网格样式的RecyclerView来显示 所以这里
  • Android复杂布局线性和相对

    I have to implement a layout like shown in the diagram and I do not know the best combination to achieve the required de
  • 如何从灰度字节缓冲区图像创建位图?

    我正在尝试使用新的 Android 人脸检测移动视觉 API 来处理帧图像 所以我创建了自定义检测器来获取帧并尝试调用 getBitmap 方法 但它为空 所以我访问了帧的灰度数据 有没有办法从它或类似的图像持有者类创建位图 public
  • 查询联系人 - 有时返回空游标

    我正在尝试查询联系人的显示名称 Override public void onActivityResult int requestCode int resultCode Intent data switch requestCode case
  • 如何检查设备上是否安装了文本转语音 (TTS) 的特定语言数据?

    我正在创建一个使用文本转语音的应用程序 我希望用户能够离线使用它 因此我检查设备上是否安装了 TTS 数据 以下是执行此操作的代码 Check tts data is installed Intent checkTTSIntent new

随机推荐

  • 为多个域设置 httpS

    我需要为多个域名 xxxx com xxxx net 设置 https 使用单个通用证书 我们购买证书的 CA 要求创建证书签名请求 CSR 但是当我使用 openssl 生成它时 它只要求一个名称 如何为多个域制定一个 CSR 避免使用多
  • Angular2 中的条件验证

    我想对访客和客户注册表使用相同的模板 但验证可能会有所不同 如下所示 让我们假设它是宾客登记表 需要名字
  • Rails 3.0 设计通过回答问题重置密码

    我正在使用带有 Rails 3 的设备 在用户模型中 我为问题和该问题的答案创建了字段 我想知道如何按以下逻辑实现忘记密码 在忘记密码页面上用户输入用户名 在下一步中 应用程序应显示存储在数据库中的问题 用户回答问题 如果答案与数据库中存储
  • 随机访问随机排列[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想生成一个非常大的伪随机排列 p
  • SQL 查询查找特定 id 具有不同值但应相同的产品

    我需要一个 SQL 查询 它将获取相同 id 具有不同值的产品列表 产品属于表 A 和 Id 值属于表 B 并且两个表都可以通过列名 prod id 连接 我想要的输出 项目清单 product abc 因此 在输出中 我只需要产品 abc
  • 代码完成不列出消息处理程序

    When working on an old project in Delphi XE2 the code completion window that pops up after CTRL SPACE does not list mess
  • 按键从数组中删除行[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 如何从数组中删除特定元素 https stackoverflow com questions 2448964 php how to remove specific element from a
  • 只允许工厂方法实例化对象(防止实例化基类和未初始化的对象)

    我有一个处理 工作 的基类 工厂方法根据作业类型创建派生的 作业处理程序 对象 并确保使用所有作业信息初始化作业处理程序对象 调用工厂方法来请求分配的作业和人员的处理程序 public enum Job Clean Cook CookChi
  • 是否可以解密并查看 ViewState 值?

    我知道有一些工具可以让您查看 ASP NET 视图状态的内容 如果 viewState 已通过添加加密 是否可以查看和修改其内容
  • 如何对 mutate_each (和 summarise_each)使用匿名函数? [复制]

    这个问题在这里已经有答案了 正如我们所知 可以调用 R 中的函数而不将它们分配给环境 例如 gt function x x 2 5 1 2 5 我想在运行中使用这样的函数mutate each or summarise each 称呼 例如
  • PhoneGap Android 项目中的多个 Html 文件

    我正在使用 Eclipse 在 Android 中使用 Phone Gap Jquery Mobile 开发一个跨平台应用程序 我根本没有在我的应用程序中使用任何 PhoneGap 功能 我使用 PhoneGap 的目的是通过 Adob e
  • 将 RGB 颜色值转换为 0.75 alpha 的 RGBA

    我有以下代码来获取元素的背景颜色 var currentColor this css background color 返回类似的东西rgb 123 123 123 我现在想做的是将其转换为 rgba 并以 0 75 alpha 显示 所以
  • 如果远程服务器离线,Air XmlHttpRequest 超时?

    我正在编写一个通过 XmlHttpRequest 与服务器通信的 AIR 应用程序 我遇到的问题是 如果服务器无法访问 我的异步 XmlHttpRequest 似乎永远不会失败 我的 onreadystatechange 处理程序检测到 O
  • 如何获取 Ansible playbook 中使用的变量列表?

    我想获取 ansible 剧本中使用的变量列表 我研究了设置和调试模块 但我怀疑我能做到这一点 有没有通用的方法 看一眼vars debug var vars 您将看到所有变量 其中一些变量作为属性重复hostvars debug var
  • 是否有 WinForm 的 Autofac 集成库

    我正在使用 Autofac 开发 Win 表单应用程序 这里我们解决依赖关系如下 正如所见doc http autofac readthedocs org en latest getting started index html using
  • UiTextView 具有边缘到边缘排除路径导致所有文本消失

    我有一个UITextView我想添加一个自定义UIView并让文本在上方和下方流动 如下所示 txt UIView txt 我尝试通过添加具有以下内容的排除路径来实现此目的UITextView宽度和UIView的高度如下 CGRect ex
  • jQuery 延迟与append() 一起使用

    我无法使 jQuery 的延迟功能与append功能 怎么了 有办法让它发挥作用吗 我想避免使用setTimeout直接让客户更容易遵循 客户将自己维护 无需任何经验 My code chatwindow append test delay
  • 如何使用 cake 仅更新 assemblyinfo.cs 中的版本信息?

    我对蛋糕制作很陌生 我想使用 cakebuild 更新 assemblyinfo cs 的版本信息 public static void CreateAssemblyInfo 方法覆盖 assemblyinfo 文件的全部内容 但我只需要更
  • Google BigQuery - 如何使用 bq 命令删除表?

    Google BigQuery bq 命令使您能够创建 加载 查询和更改表 我没有找到任何有关删除表的文档 很高兴知道如何做到这一点 我发现 bq 工具更容易实现 而不是为每个命令编写 python 接口 Thanks 找到了 bq rm
  • 如何在Android上运行时检查用户是否授予了权限?

    我创建了一个简单的 Android 活动 充当拨号盘 它有一个电话号码的编辑文本和一个呼叫按钮 这是代码 android 6 0 marshmallow public class Main2Activity extends AppCompa