首页 > 解决方案 > 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

标签: androidandroid-auto

解决方案


我建议查看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 尝试如果它出现。
我没有设法找到关于应该将哪些块添加到汽车应用程序描述中的所有描述和逻辑。


推荐阅读