如何使用kivy处理android运行时权限

2023-12-12

我发现 kivy 是构建跨平台应用程序的非常好的框架,并且我对 kivy 非常感兴趣,只是为了做 android 应用程序,因为我认为在 kivy 中很容易和舒适。

在尝试了几个例子之后,我有兴趣知道应该如何处理 kivy 应用程序的 android 运行时权限。

实际上我在谷歌上搜索过,但没有一个可行的例子。我应该回到 android / java 还是可以使用 kivy 和其他一些 python 库。


pyjnius 是正确的选择。你必须移植这些说明使用 pyjnius。这涉及以下步骤:

  • 不幸的是,对 ContextCompat.checkSelfPermission 的 api 调用是在 android sdk 支持库中实现的,必须单独下载, 因此,获取与您的 Android API 级别最匹配的版本的 .aar例如这里.
  • 将其复制到您的项目目录中并从 buildozer.spec 中引用它:

    android.add_aars = support-v4-26.0.0-alpha1.aar  
    
  • 确保 jinius 符合 buildozer.spec 中的要求

  • 使用以下代码片段

注意:这是一个阻塞函数,它会等待权限对话框得到答复。如果应用程序已经拥有权限,该函数会立即返回。例如,如果您想获得写入 SD 卡和相机的权限,这两者都是“危险权限”,请调用:

perms = ["android.permission.READ_EXTERNAL_STORAGE",
         "android.permission.WRITE_EXTERNAL_STORAGE",
         "android.permission.CAMERA"]

haveperms = acquire_permissions(perms)

这里是获取权限的函数:

import time
import functools
import jnius

def acquire_permissions(permissions, timeout=30):
    """
    blocking function for acquiring storage permission

    :param permissions: list of permission strings , e.g. ["android.permission.READ_EXTERNAL_STORAGE",]
    :param timeout: timeout in seconds
    :return: True if all permissions are granted
    """

    PythonActivity = jnius.autoclass('org.kivy.android.PythonActivity')
    Compat = jnius.autoclass('android.support.v4.content.ContextCompat')
    currentActivity = jnius.cast('android.app.Activity', PythonActivity.mActivity)

    checkperm = functools.partial(Compat.checkSelfPermission, currentActivity)

    def allgranted(permissions):
        """
        helper function checks permissions
        :param permissions: list of permission strings
        :return: True if all permissions are granted otherwise False
        """
        return reduce(lambda a, b: a and b,
                    [True if p == 0 else False for p in map(checkperm, permissions)]
                    )

    haveperms = allgranted(permissions)
    if haveperms:
        # we have the permission and are ready
        return True

    # invoke the permissions dialog
    currentActivity.requestPermissions(permissions, 0)

    # now poll for the permission (UGLY but we cant use android Activity's onRequestPermissionsResult)
    t0 = time.time()
    while time.time() - t0 < timeout and not haveperms:
        # in the poll loop we could add a short sleep for performance issues?
        haveperms = allgranted(permissions)

    return haveperms

也许最干净的方法是通过 p4a 的 PythonActivity.java 来做到这一点,但现在这个方法已经为我做到了。

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

如何使用kivy处理android运行时权限 的相关文章

  • 如何在android中的操作栏中创建Edittext?

    我们可以在操作栏中使用编辑文本吗 在阅读了 Google 中的大量资源后 我找不到如何在操作栏中创建编辑文本 谁能告诉我该怎么做 您可以设置自定义View为了ActionBar像这样 getActionBar setCustomView R
  • 在 AppAuth-Android 中注销

    我有一个用JAVA开发的Android应用程序 对于这个应用程序 我使用的是身份服务器4 https github com IdentityServer IdentityServer4作为我的 STS 一切正常 但我找不到任何注销的实现Ap
  • 将 numpy 代码点数组与字符串相互转换

    我有一个很长的 unicode 字符串 alphabet range 0x0FFF mystr join chr random choice alphabet for in range 100 mystr re sub W mystr 我想
  • android 中camera.setParameters 失败

    我已将相机功能包含在我的应用程序中 我还在市场上推出了该应用程序 我从一位用户那里收到一条错误消息 称他在打开相机时遇到错误 我已经在 2 1 的设备上测试了该应用程序 我从用户那里得到的错误是使用 Nexus One 它主要运行 2 2
  • 如何在Python中按AaB而不是ABa顺序对字符串进行排序

    我正在尝试对字符串进行排序 为 punnetsquare 制作基因型 我目前的实现是 unsorted genotype ABaB sorted genotype sorted list unsorted genotype sorted s
  • 使用嵌套的 hashmap 参数发送 volley 请求

    我正在使用 android volley 框架向我的服务器发送 jsonobject 请求 get 请求工作正常 现在我想发送一个带有请求参数的 post 请求 该请求参数是嵌套的 hashmap 我重写 getparams 方法 但它期望
  • 迭代列表的奇怪速度差异

    我创建了两个重复两个不同值的长列表 在第一个列表中 值交替出现 在第二个列表中 一个值出现在另一个值之前 a1 object object 10 6 a2 a1 2 a1 1 2 然后我迭代它们 不对它们执行任何操作 for in a1 p
  • Pandas 堆积条形图中元素的排序

    我正在尝试绘制有关某个地区 5 个地区的家庭在特定行业赚取的收入比例的信息 我使用 groupby 按地区对数据框中的信息进行排序 df df orig groupby District Portion of income value co
  • Python:我不明白 sum() 的完整用法

    当然 我明白你使用 sum 与几个数字 然后它总结所有 但我正在查看它的文档 我发现了这一点 sum iterable start 第二个参数 start 的作用是什么 这太尴尬了 但我似乎无法通过谷歌找到任何示例 并且对于尝试学习该语言的
  • Android:打开和关闭SQLite数据库

    我正在开发Android应用程序 我经常在其中访问本地数据库 该数据库可以从不同的主题访问 因此我遇到了数据库的协调问题 我使用以下open and close method public void open mDb mDbHelper g
  • 在 Windows 上使用带有对数刻度的 matplotlib 时出现 Unicode 错误

    我正在使用 python 2 6 和 matplotlib 如果我运行 matplotlib 库页面中提供的示例 histogram demo py 它工作正常 我已经大大简化了这个脚本 import numpy as np import
  • Android:确定 2.2 及更高版本上的摄像头数量

    我的应用程序需要在 Android 2 2 及更高版本上运行 我需要一种方法来确定可用摄像机的数量 有很多帖子解决了这个问题 但我找不到一个有效的 一种解决方案是简单地检测操作系统版本 任何 2 2 版本的设备都仅限于 1 个摄像头 即使该
  • Android - iphone 风格 tabhost [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 从 python 检测 macOS 中的暗模式

    我正在编写一个 PyQt 应用程序 我必须添加一个补丁 以便在启用暗模式的 Macos 上可以读取字体 app QApplication Fix for the font colours on macos when running dark
  • Flask 应用程序的测试覆盖率不起作用

    您好 想在终端的 Flask 应用程序中测试 删除路由 我可以看到测试已经过去 它说 test user delete test app LayoutTestCase ok 但是当我打开封面时 它仍然是红色的 这意味着没有覆盖它 请有人向我
  • Python对象初始化性能

    我只是做了一些快速的性能测试 我注意到一般情况下初始化列表比显式初始化列表慢大约四到六倍 这些可能是错误的术语 我不确定这里的行话 例如 gt gt gt import timeit gt gt gt print timeit timeit
  • 字符串列表,获取n个元素的公共子串,Python

    我的问题可能类似于this https stackoverflow com questions 37514193 count the number of occurrences of n length not given string in
  • python 日志记录会刷新每个日志吗?

    当我使用标准模块将日志写入文件时logging 每个日志会分别刷新到磁盘吗 例如 下面的代码会将日志刷新 10 次吗 logging basicConfig level logging DEBUG filename debug log fo
  • 具有矢量可绘制的 ImageView 的 Resources$NotFoundException

    我遇到了崩溃 Resources NotFoundException用于在活动创建时绘制的矢量 21 日前崩溃 安卓工作室2 1 支持库24 0 0 Gradle插件2 1 0 目标SDK 23 最小SDK 15 buildTools版本
  • putFragment() - 片段 x 当前不在 FragmentManager 中

    上面的标题被问了很多次 但答案似乎与FragmentStatePagerAdapter这与我的问题无关 我正在使用该方法putFragment Bundle String Fragment 直接地 The 安卓文档 http develop

随机推荐

  • 为什么从 ResourceBundle.getBundle 检索字符串时出现无法理解的字符

    请告诉我如何解决这个问题 Locale locale new Locale language ResourceBundle messages ResourceBundle getBundle i18n messages locale utf
  • C++ 运算符歧义

    请原谅我 因为我对 C 相当陌生 但我在运算符歧义方面遇到了一些麻烦 我认为它是特定于编译器的 适用于在我的桌面上编译的代码 但是 它无法在我的笔记本电脑上编译 我想我知道出了什么问题 但我没有看到一个优雅的解决方法 如果我犯了一个明显的错
  • CMSampleBufferGetImageBuffer 中的内存泄漏

    我得到了一个UIImage from a CMSampleBufferRef每 N 个视频帧进行视频缓冲 例如 void imageFromVideoBuffer void UIImage image completion CMSample
  • 如何在具有 ARM CPU 的 WinRT 设备中部署 SQLite?

    我正在开发一个 C Window8 WinRT 应用程序 并且正在使用 SQLite NET 以及链接在文档底部的 sqlite3 dll https github com praeclarum sqlite net 我的项目在我的计算机上
  • 在 PHP 中以编程方式创建 Excel 图表

    您知道如何通过 PHP 以编程方式在 Excel 工作表中创建图表吗 我知道您可以调用 Excel COM 对象 但服务器正在 Linux 计算机上运行 我已经使用了优秀的 PHPExcel 库 但他们不提供创建图表的选项 Thanks 尝
  • 如何使用新的图形 API 在 FB 中显示扩展权限对话框?

    我之前使用旧的 REST API 在 Facebook 中显示权限对话框 现在 有了新的图形 API 我能做什么 我在 IFrame 应用程序中 我知道我可以作弊并在单独的窗口中弹出权限 FB login function response
  • 运行 php 脚本时 Jquery 函数说未定义

    我基本上是这样做的 所以当你点击一个按钮 投票 时 现在我有 客户 php
  • .net Core Mailkit 从数组发送附件

    我正在测试 Net Core MVC 它不支持 System Net Mail 我发现的唯一替代方案是 Mailkit 效果很好 但无法弄清楚如何发送我以二进制形式存储在数据库中的附件 我在 MVC 5 中使用了以下内容 var mail
  • Eclipse CDT 不会运行已编译的 exe 文件

    所以我决定安装 Eclipse CDT 作为我选择的 IDE 然而 似乎一旦我开始运行需要输入的 C 程序 Eclipse 就决定停止运行控制台窗口中的文件 我尝试在任务管理器中关闭该程序的所有实例 并且我在计算机上找到的 exe 文件运行
  • 在 Postgres 中复制/克隆表的最快方法是什么?

    我知道我能做到CREATE TABLE tbl 2 AS select from tbl 1 但有没有更好 更快 更强的方法来做到这一点 我现在谈论的主要是性能 这些表都是非规范化的 我没有任何外键约束需要担心 EDIT 或许就没有更好的办
  • 使用“graphics.DrawString”后如何提高打印文本质量?

    打印后我的文本质量有问题 它不平滑和抗锯齿 故事是这样的 我从位图创建图形 Graphics FromImage MyBitmap and 我认为这是我的问题的起点 因为我无法使用 PrintPageEvenArg e 但我别无选择 之后我
  • Tensorflow 似乎没有看到我的 GPU

    我已经在cuda 7 5和8 0上尝试过tensorflow 没有cudnn 我的GPU很旧 cudnn不支持它 当我执行时device lib list local devices 输出中没有 GPU Theano 可以看到我的 GPU
  • Android 6.0获取MAC地址

    我正在开发一个获取设备 MAC 地址的应用程序 但从 Android 6 0 开始 我的代码不起作用 给了我一个不正确的值 这是我的代码 public String ObtenMAC WifiManager manager WifiMana
  • Applet 类加载器无法在 applet 的 jar 中找到类

    我开始问这个问题 然后在提交之前找到了答案 无论如何 我决定发布这个问题 以便其他遇到同样问题的人能够从我的错误中吸取教训 我在使用小程序时遇到问题 aJApplet实际上 无法实例化与小程序包含在同一 jar 中的另一个类 我在 Java
  • 键盘没有响应 resignFirstResponder

    我不想显示键盘 而是想在选择文本字段时显示弹出窗口视图 我的代码位于底部 如果键盘未显示 则一切正常 但是 如果显示键盘然后选择文本字段 则键盘不会消失 第一个响应者一定在某个地方迷路了 但我不知道在哪里 有人有解决办法吗 我的文本字段 s
  • Rust 中具有变化行为的有限(游戏)状态机模式?

    我正在尝试用 Rust 编写一个回合制游戏 但我在该语言中遇到了障碍 除非我没有完全理解某些东西 我是该语言的新手 基本上 我想更改游戏中的状态 其中每个状态都有不同的行为 例如我有类似的东西 struct Game state Some
  • pyspark rdd isCheckPointed() 为 false

    当我向 pyspark 数据帧迭代添加 500 多列时 遇到了 stackoverflowerrors 所以 我包括了检查点 检查站没有帮助 因此 我创建了以下玩具应用程序来测试我的检查点是否正常工作 我在此示例中所做的就是通过一遍又一遍地
  • 如何以编程方式关闭应用程序?

    我正在寻找完全关闭我的应用程序的按钮的代码 我尝试使用谷歌的一些东西 但我的应用程序仍在后台运行 我需要完全关闭它 有代码可以做到这一点吗 为什么你需要真正关闭你的应用程序 假设它只是一个普通的应用程序 没有运行任何后台服务或持有唤醒锁 你
  • 在 Mac OS X 10.6 上卸载 Ruby on Rails

    我正在尝试让 RoR 启动并运行 mysql 数据库 但这对我来说似乎是不可能的 在包含 mysql gem 时出现错误 所以我尝试通过控制台做很多事情但没有结果 我不记得我做了什么 所以 我想删除所有内容并从cero重新开始 如何从 Ma
  • 如何使用kivy处理android运行时权限

    我发现 kivy 是构建跨平台应用程序的非常好的框架 并且我对 kivy 非常感兴趣 只是为了做 android 应用程序 因为我认为在 kivy 中很容易和舒适 在尝试了几个例子之后 我有兴趣知道应该如何处理 kivy 应用程序的 and