Разработка собственного приложения для Android Auto

Я разработчик Android и пытаюсь разработать собственное приложение Android Auto, которое выполняет простое зеркальное отображение экрана телефона. Я знаю, что в настоящее время API доступны только для музыки и приложений для обмена сообщениями, но я бы написал приложение для зеркального отображения простого «привет, мир». Я следую руководству Google по началу работы и использую головное устройство рабочего стола (DHU), предоставленное Google (по адресу developer.android.com/training/auto/testing/index.html)

но когда я нажимаю последнюю кнопку в нижней части дисплея и выбираю «Все автомобильные приложения», мое приложение не появляется в списке.

Все автомобильные приложения

Например, если Android Auto запущен на планшете Samsung (SM-T555), DHU перечисляет эти приложения:

com.google.android.gms, Карты, Системный интерфейс, Видео, SampleAuthenticatorService, SecureSampleAuthService, Снимок экрана, Android Auto, Телефон, Медиа, Возврат в Google, Выставление счетов Samsung, Приложение Google, Google Play Музыка, Музыка

Доступные автомобильные приложения на планшете Samsung

Как сделать приложение, которое будет отображаться в списке доступных приложений в Android Auto? Возможно ли зеркальное отображение пользовательского приложения в Android Auto?


person DemoneCT    schedule 06.03.2017    source источник


Ответы (3)


Создайте такой сервис:

public class HelloWorldService extends CarActivityService {

    @Override
    public Class<? extends CarActivity> getCarActivity() {
        return HelloWorldAutoActivity.class;
    }
}

Затем добавьте сервис в свой манифест следующим образом:

    <meta-data
        android:name="com.google.android.gms.car.application"
        android:resource="@xml/automotive_app_desc" />

    <service
        android:name=".HelloWorldService"
        android:exported="true"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="com.google.android.gms.car.category.CATEGORY_PROJECTION" />
            <category android:name="com.google.android.gms.car.category.CATEGORY_PROJECTION_OEM" />
        </intent-filter>
    </service>

Наконец, создайте xml-файл с именем automotive_app_desc в папке res:

<automotiveApp>
    <uses name="service" />
    <uses name="projection" />
    <uses name="notification" />
</automotiveApp>

Ваш HelloWorldAutoActivity.class будет работать как ваша MainActivity.

person Aldo López    schedule 15.03.2017
comment
Не могли бы вы предоставить информацию, откуда: CarActivityService? Я не вижу в Android службы с таким названием. Также вы не упомянули, что вам нужна Activity, которая расширяет CarActivity? Откуда этот класс? - person Dominik Mičuta; 12.06.2017
comment
Вам нужно извлечь и создать dex2jar из Android Auto, затем импортировать его в свой проект и установить как файловую зависимость. - person Emil Borconi; 03.07.2017
comment
@EmilBorconi У вас возникли проблемы с привязкой преобразованного dex к вашему проекту? ..... Я получаю сообщение об ошибке, в котором gradle сообщает, что не может извлечь zip-файл в каталог tmp ..... - person J1and1; 17.07.2017
comment
Да, к сожалению, у меня нет времени разбираться в этом подробнее. С другой стороны, слышал ли я, что одна из группы VW (Skoda или Seat) только что запустила первое приложение, которое использует 5-ю вкладку в AA. Мне нужно будет найти его и попытаться извлечь из него файлы dex и перевернуть их, чтобы увидеть, чего можно достичь и с какой библиотекой они связываются. - person Emil Borconi; 17.07.2017
comment
@ J1and1 - попробуйте использовать эту банку: app.box.com/s/v13xfv32qtkdafo4splwltime6ut4l22 и импортируйте это так: import com.google.android.apps.auto.sdk. *; У меня не было возможности изучить доступные классы / функции / и т. Д., Так как при обратном генерировании не ожидается официальной поддержки. - person Emil Borconi; 31.07.2017
comment
@EmilBorconi Спасибо за банку. Это работает как шарм ..... Мне нужно будет провести некоторые исследования с декомпилятором Java, чтобы выяснить некоторые незначительные вещи, которые мне нужны для моего проекта ... это приблизило меня на шаг ... Еще раз спасибо !!! !!! - person J1and1; 09.08.2017
comment
@ J1and1 Пожалуйста, если вам удастся кое-что узнать, я хотел бы об этом услышать. У меня еще нет времени, чтобы начать копаться в этом, но, надеюсь, в ближайшем будущем я сделаю это сам. - person Emil Borconi; 09.08.2017
comment
@EmilBorconi, не могли бы вы еще раз взглянуть на это? Старая версия, похоже, больше не работает. Я преобразовал новый apk в банку, но, насколько я могу судить, вся часть sdk исчезла. Тем не менее, похоже, что сейчас в APK AA есть целые приложения, например com.seat.connectedcar, но я еще недостаточно опытен, чтобы понять, можем ли мы как-то повторно использовать эти части - person Kimmax; 03.05.2019
comment
@Kimmax - почти бессмысленно, поскольку Google блокирует любые приложения, не относящиеся к мультимедиа / сообщениям. - person Emil Borconi; 09.05.2019

Чтобы приложение отображалось на Auto. Вам нужно будет загрузить его в игровой магазин на бета-канале.

person vishalpa    schedule 16.02.2018
comment
Не правда. Вам необходимо активировать development mode, а затем включить unknown services на самом Android Auto. - person Przemo; 14.05.2019
comment
@Przemo Я сделал это, и приложение не отображается в Android Auto. - person Dansp; 01.03.2021
comment
@Dansp, честно говоря, я понятия не имею, что изменилось в авто с тех пор, поэтому не могу вам помочь: / - person Przemo; 01.03.2021
comment
@ Przemo да, пока не работает, так грустно: '( - person JalalKun; 24.03.2021

Основной файл активности

Основной код активности - это Java-файл MainActivity.java. Это фактический файл приложения, который в конечном итоге преобразуется в исполняемый файл Dalvik и запускает ваше приложение. Ниже приведен код по умолчанию, созданный мастером приложений для Hello World! приложение -

package com.example.helloworld;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
   }
}

Файл манифеста

Какой бы компонент вы ни разработали как часть своего приложения, вы должны объявить все его компоненты в файле manifest.xml, который находится в корне каталога проекта приложения. Этот файл работает как интерфейс между ОС Android и вашим приложением, поэтому, если вы не объявите свой компонент в этом файле, он не будет рассматриваться ОС. Например, файл манифеста по умолчанию будет выглядеть следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.tutorialspoint7.myapplication">

   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:supportsRtl="true"
      android:theme="@style/AppTheme">

      <activity android:name=".MainActivity">
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>
   </application>
</manifest>

Файл строк

Файл strings.xml находится в папке res / values ​​и содержит весь текст, который использует ваше приложение. Например, в этот файл входят названия кнопок, меток, текст по умолчанию и аналогичные типы строк. Этот файл отвечает за их текстовое содержание. Например, файл строк по умолчанию будет выглядеть следующим образом:

<resources>
   <string name="app_name">HelloWorld</string>
   <string name="hello_world">Hello world!</string>
   <string name="menu_settings">Settings</string>
   <string name="title_activity_main">MainActivity</string>
</resources>

Файл макета

Activity_main.xml - это файл макета, доступный в каталоге res / layout, на который ваше приложение ссылается при создании своего интерфейса. Вы будете изменять этот файл очень часто, чтобы изменить макет вашего приложения. За "Hello World!" приложение, этот файл будет иметь следующий контент, связанный с макетом по умолчанию -

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent" >

   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerHorizontal="true"
      android:layout_centerVertical="true"
      android:padding="@dimen/padding_medium"
      android:text="@string/hello_world"
      tools:context=".MainActivity" />

</RelativeLayout>
person Eeshaan Sethia    schedule 27.06.2017
comment
Этот ответ является полным упущением и даже близко не подходит к ответу на вопрос. Этот ответ был бы замечательным, если бы вопрос был в том, как создать приложение hello world для Android? Но этот вопрос касается Android Auto, который представляет собой специальный API для интеграции приложений с головным устройством, совместимым с Android Auto. Этот ответ следует удалить. - person Thomas Carlisle; 26.11.2018
comment
это вообще не отвечает на его вопрос? - person markharrop; 12.02.2021
comment
Похоже, это плагиат с tutorialspoint.com/android/android_hello_world_example.htm - person Wai Ha Lee; 10.03.2021