如何获得 Driver Distraction 优化的许可?

如何解决如何获得 Driver Distraction 优化的许可?

我想编写一个汽车应用程序,它应该在用户驾驶时简单地显示地图。我正在使用 Android Studio 4.0.1 和 Kotlin 进行开发。 为了创建用于测试的模拟器,我使用 Android Studio 4.2 Beta 1 下载汽车系统映像,因为在 4.0.1 中没有汽车系统映像可用。

我坚持要让这个应用程序“分心优化”,所以不幸的是,该应用程序仍然覆盖着黑屏和文本“你不能在开车时使用这个功能”。

当我遵循指南 ([https://source.android.com/devices/automotive/driver_distraction/guidelines][1]) 时,似乎我只需将以下元数据添加到活动元素中manifest.xml(我只有一个活动):

<activity>
  ...
  <Meta-data android:name="distractionoptimized" android:value="true"/>
  ...
</activity>

当然,我还向 manifest.xml 文件中的 manifest-tag 请求以下所需的权限(除其他外):

...
<uses-permission android:name="android.car.permission.CAR_UX_RESTRICTIONS_CONfigURATION" />
<uses-permission android:name="android.car.permission.CAR_DRIVING_STATE"/>
...

以及我传递给 requestPermissions(...)-function 的权限数组

val PERMISSIONS_ARRAY = arrayOf(
        ...
        Car.PERMISSION_CAR_UX_RESTRICTIONS_CONfigURATION,Car.PERMISSION_CAR_DRIVING_STATE,...
    )   
requestPermissions(PERMISSIONS_ARRAY,0)

onRequestPermissionsResult(...) 中,我发现这两个权限被拒绝。但是在第一次应用程序启动时,甚至没有提示/要求用户授予该权限。同样在设置中,无法为应用程序提供这些权限。在后面的一段代码getActiveRestrictions() 总是返回 255,这意味着所有限制都处于活动状态,对吗?另一个迹象表明该应用程序不允许自行处理 Driver distraction,因此操作系统通过根本不显示该应用程序来处理它...

我做错了什么?我可能会错过什么?有人有想法吗?

解决方法

在清单中将 Activity 标记为 DO 是不够的,还必须从受信任的来源(如 Play 商店)下载/安装它,否则 CarPackageManagerService 将不允许应用在任何受限驾驶状态下显示.

,

通过阅读“CarPackageManagerService”源代码中的以下注释可以获得一些见解(网站文档未完全提供),该注释对应用程序和活动执行检查以查看它们是否经过分心优化(DO ),其中包括:

https://android.googlesource.com/platform/packages/services/Car/+/master/service/src/com/android/car/pm/CarPackageManagerService.java#740

实际上,这意味着您的应用需要:

  • 一个系统应用,
  • 在 config.xml 文件中列入白名单,该文件是 OEM 为其汽车服务创建配置的资源文件,或
  • 在应用清单中标记为 DO,并且由允许的来源安装。允许的源列表从 R.array.allowedAppInstallSources 加载。

这些规则的一个例外是,如果您的操作系统是调试版本。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?