android - Android Auto Desktop Head Unit (DHU) Hello World 应用程序已启动,但 DHU 中没有可用的启动器图标
问题描述
我从 Android Automotive 的“No Activity”模板创建了第一个适用于 Android Auto 的 Hello World 应用程序。
在启动选项中,我不得不选择任何内容。构建成功,Android Studio 报告“启动成功”。
但在 DHU 中,应用程序的启动器图标不可见。
即使关闭 DHU,在 Android Auto 中停止开发服务器,杀死 Android,重新启动它,在 Auto 中重新启动开发服务器,DHU 也不会出现启动图标。
我的 AndroidManifest.xml 定义为
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.oliverkarst.fastccschargers">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="androidx.car.app.NAVIGATION_TEMPLATES"/>
<uses-permission android:name="androidx.car.app.ACCESS_SURFACE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-feature android:name="android.hardware.type.automotive" android:required="true" />
<uses-feature android:name="android.software.car.templates_host" />
<application>
<service
android:name=".HelloWorldService"
android:exported="true"
android:label="Fast CCS Chargers"
android:icon="@mipmap/ic_launcher">
<intent-filter>
<action android:name="androidx.car.app.CarAppService" />
<category android:name="androidx.car.app.category.CHARGING"/>
</intent-filter>
</service>
<meta-data
android:name="androidx.car.app.minCarApiLevel"
android:value="1" />
</application>
</manifest>
HelloWorldService.kt 定义为
package de.oliverkarst.fastccschargers
import android.content.pm.ApplicationInfo
import androidx.car.app.CarAppService
import androidx.car.app.Session
import androidx.car.app.validation.HostValidator
class HelloWorldService : CarAppService() {
override fun createHostValidator(): HostValidator {
return if (applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE != 0) {
HostValidator.ALLOW_ALL_HOSTS_VALIDATOR
} else {
HostValidator.Builder(applicationContext)
.addAllowedHosts(androidx.car.app.R.array.hosts_allowlist_sample)
.build()
}
}
override fun onCreateSession(): Session {
return HelloWorldSession()
}
}
HelloWorldSession.kt
package de.oliverkarst.fastccschargers
import android.content.Intent
import androidx.car.app.Screen
import androidx.car.app.Session
class HelloWorldSession() : Session() {
override fun onCreateScreen(intent: Intent): Screen {
return HelloWorldScreen(carContext)
}
}
HelloWorldScreen.kt
package de.oliverkarst.fastccschargers
import androidx.car.app.CarContext
import androidx.car.app.Screen
import androidx.car.app.model.*
class HelloWorldScreen(carContext: CarContext) : Screen(carContext) {
override fun onGetTemplate(): Template {
val row = Row.Builder().setTitle("Hello").build()
val pane = Pane.Builder().addRow(row).build()
return PaneTemplate.Builder(pane)
.setHeaderAction(Action.APP_ICON)
.build()
}
}
我只创建了汽车模块。没有移动模块。难道是我必须先创建和安装它?
有谁知道我做错了什么?
我按照这里的说明https://developer.android.com/training/cars/apps/navigation
解决方案
我建议查看car_samples,特别是应用程序的清单文件。经过多次尝试,我认为将以下元数据添加到您已经拥有的清单中很重要:
<meta-data android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc"
tools:ignore="MetadataTagInsideApplicationTag" />
和资源文件如下:
<?xml version="1.0" encoding="utf-8"?>
<automotiveApp xmlns:android="http://schemas.android.com/apk/res/android">
<uses name="template" />
</automotiveApp>
安装应用程序后,重新启动 DHU 尝试如果它出现。
我没有设法找到关于应该将哪些块添加到汽车应用程序描述中的所有描述和逻辑。
推荐阅读
- hyperlink - Apexchart 时间线:如何为系列的每个条设置自定义链接
- python - 在 JSON 中分离唯一/重复数据
- networking - 外部 IP 地址 gcp 控制台和 API 计数不匹配
- cofoundry - 有没有办法重用 Cofoundry 中的内置 HTML 编辑器
- laravel - Laravel excel为此csv数据结构导入csv配置?
- reactjs - reactJS中的useContext带有导致未定义对象的自定义钩子
- javascript - 使用 javascript 在 SOAP 响应中查找 xml 属性值
- android - 管理 PeriodicWorkRequest 和 OneTImeWorkRequest
- javascript - 从解包加载的扩展会引发内容安全错误
- javascript - 如何在 GET 请求中从 mongodb 中过滤和选择特定字段?