#android #android-auto
#Android #android-авто
Вопрос:
Я сижу с приложением и хочу попробовать его для Android Auto. Я использую DHU для эмуляции панели мониторинга, но я не могу увидеть макет из-за ошибки ANR (приложение не отвечает).
Я действительно получаю одну ошибку в logcat, но я не уверен, связано ли это с этим:
2021-03-04 15:36:07.654 19595-19616/com.ooono.app W/Binder: Caught a RuntimeException from the binder stub implementation.
java.lang.SecurityException: Binder invocation to an incorrect interface
at android.os.Parcel.nativeEnforceInterface(Native Method)
at android.os.Parcel.enforceInterface(Parcel.java:650)
at androidx.car.app.ICarApp$Stub.onTransact(ICarApp.java:207)
at android.os.Binder.execTransactInternal(Binder.java:1159)
at android.os.Binder.execTransact(Binder.java:1123)
Мой код в основном таков
import android.content.Intent
import android.content.pm.ApplicationInfo
import androidx.car.app.*
import androidx.car.app.model.*
import androidx.car.app.navigation.model.NavigationTemplate
import androidx.car.app.validation.HostValidator
class CarActivity : CarAppService() {
override fun createHostValidator(): HostValidator {
return if (applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE !== 0) {
HostValidator.ALLOW_ALL_HOSTS_VALIDATOR
} else {
HostValidator.Builder(this)
.addAllowedHosts(R.array.hosts_allowlist_sample)
.build()
}
}
override fun onCreateSession(): Session {
return object : Session(){
override fun onCreateScreen(intent: Intent): Screen {
return NavScreen(carContext)
}
}
}
class NavScreen(carContext: CarContext) : Screen(carContext){
override fun onGetTemplate(): Template {
val listTemplate = ListTemplate.Builder().apply {
addSectionedList(SectionedItemList.create(
ItemList.Builder()
.addItem(Row.Builder().setTitle("list 1").addText("hellowrodl").build())
.build(),"List"
))
}
return listTemplate.build()
}
private fun actionStrip():ActionStrip{
val strip = ActionStrip.Builder().apply {
addAction(Action.Builder().setIcon(CarIcon.APP_ICON).setTitle("Ooono").setOnClickListener { }.build())
}.build()
return strip
}
}
}
и я добавил необходимые теги в манифест:
<meta-data
android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc" />
<service
android:name=".aa.CarActivity"
android:label="@string/common_app_name"
android:icon="@mipmap/ic_launcher"
android:foregroundServiceType="location"
android:exported="true">
<intent-filter>
<action android:name="androidx.car.app.CarAppService"/>
<category android:name="androidx.car.app.category.NAVIGATION"/>
</intent-filter>
</service>
Ответ №1:
У меня была та же проблема. В зависимости от того, насколько новым является ваш Android-телефон, у вас должно быть 2 варианта:
- Изменить библиотеку:
изменение библиотеки с AndroidX на руководство по миграции com.google.android (просто обратные слова) является понижением. AndroidX предоставляет больше функциональности и будет регулярно обновляться — com.google.android закрыт. Для первого впечатления, если все будет в порядке, для дальнейших подходов рекомендуется AndroidX
Попробовать демонстрационную версию HelloWorld, чтобы проверить ее функциональность
—> В моем случае проблема заключалась в «старом» физическом телефоне с Android 9, и старая библиотека работает без каких-либо проблем, а Android X — нет.Полезные ссылки:
Обзор библиотеки автомобильных приложений AndroidX - Используйте новый телефон -> Android 10 должен быть в порядке.
Мой основной телефон Android (xiaomi mi note 10 lite — Android 10) и AndroidX работают без проблем
Комментарии:
1. Чтобы сделать ваш ответ более актуальным, вы должны объяснить, что включает в себя изменение библиотеки и на что ее следует изменить. Также было бы полезно объяснить, почему изменение версии Android улучшит ситуацию и какие проблемы вызывает использование текущей библиотеки.
2. Я использовал Pixel 3a с A11, так что вряд ли что-то старое :/
Ответ №2:
Я использовал Samsung 9 с Android 10, когда столкнулся с этой ошибкой, затем переключился на свой Pixel 3XL с Android 11, и он начал работать. Действительно странно!