Android Things仅支持有限数量的API,例如Cast,Drive和Location API。我正在尝试使用一个API,我想在API方法和它所需的权限之间进行映射。我不确定执行此类任务的最佳方法是什么。我正在使用英特尔Edison主板。基本上,我需要做这样的事情:
======方法=============必需的Android权限=============
===== getLocation()====> ===== android.permission.ACCESS_FINE_LOCATION
===== getBeaconState()===> ===== android.permission.ACCESS_FINE_LOCATION
另外,我需要看看如果缺少所需的权限会发生什么?我只想找到关于如何完成这些任务的想法。
答案 0 :(得分:1)
我不确定你想要实现什么,如果它是文档或代码中的东西,但是fwiw AndroidThings对权限的行为不同,所以你不必在你的代码库中做任何事情。
不支持在运行时请求权限,因为不保证嵌入式设备具有接受运行时对话框的UI。在应用程序的清单文件中声明所需的权限。应用程序清单中声明的所有正常和危险权限都将在安装时授予。
这是来自Android Things文档https://developer.android.com/things/sdk/index.html
正如你所看到的那样
在应用程序清单中声明的所有正常和危险权限都将在安装时授予。
因此,如果您使用需要ACCESS_FINE_LOCATION
的地图,您将在安装时被授予权限,并且不需要为“运行时权限”编写任何代码,因为它们不存在。
答案 1 :(得分:0)
尝试使用此位置运行时权限
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) ==
PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) ==
PackageManager.PERMISSION_GRANTED) {
//Do your work if permission already granted
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
}
并覆盖onRequestPermissionResult
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == 1) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//Do your Work
}
}
}
答案 2 :(得分:0)
在AndroidManifest.xml
中声明<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
在设备上安装apk,然后重启设备,它解决了我的问题。
答案 3 :(得分:-1)
使用ActivityCompat.checkSelfPermission
作为检查权限。
使用ActivityCompat.requestPermissions
获取请求权限。
使用接口ActivityCompat.OnRequestPermissionsResultCallback
进行回调。