我在使用
Python
和 Python-for-Android/Pyjnius
中按下 Kivy
中的按钮时验证权限时遇到问题。
from android.permissions import check_permission
# Checks permissions returns True if app has permission
if check_permission('android.permission.ACCESS_FINE_LOCATION'):
# [...] wifi scan code
上面按预期工作,在应用程序安装时,它请求访问精细位置,我点击接受,打开扫描网络的应用程序按预期工作,当我将其关闭时,它会在
RecycleView
上显示一条消息,表示权限被拒绝。
但是,蓝牙检查是另一回事。
from android.permissions import check_permission, Permission
# Check permission returns True if app has all permissions
permissions = [Permission.BLUETOOTH_SCAN, Permission.BLUETOOTH_CONNECT, Permission.ACCESS_FINE_LOCATION]
granted = True
for permission in permissions:
granted = granted and check_permission(permission)
if granted:
# [...] bluetooth code scan
当我的应用程序未验证权限时,它运行良好,当我将它们放入“权限被拒绝”时,尽管在我们单独的
request_permissions.py
脚本中,我们在应用程序的构建中请求这些权限,并且我们的 buildozer.spec
也拥有这些权限。
需要注意的是,我们负责扫描的两个功能都放在单独的
Threads
中,但即便如此,为什么WiFi可以工作而蓝牙却不能呢?
在我的硬件 Samsung S9 - Android 10 上,尽管扫描仪可以工作,但它从不请求蓝牙权限,但会在首次应用程序启动时请求
ACCESS_FINE_LOCATION
权限。
有人知道这是为什么吗?
好吧,原来是我的手机
Android 10
出了问题。根据 Android API 文档,您需要额外的附加权限。
https://developer.android.com/develop/connectivity/bluetooth/bt-permissions