Criar um app de ponto de interesse

Este guia detalha os diferentes recursos da biblioteca Car App que podem ser usados para implementar a funcionalidade do seu app de ponto de interesse (PDI).

Declarar suporte à categoria no manifesto

Seu app precisa declarar a androidx.car.app.category.POI categoria do app para carros no filtro de intent da classe CarAppService.

O exemplo a seguir mostra como declarar a categoria do app:

<application>
    ...
   <service
       ...
        android:name=".MyCarAppService"
        android:exported="true">
      <intent-filter>
        <action android:name="androidx.car.app.CarAppService" />
        <category android:name="androidx.car.app.category.POI"/>
      </intent-filter>
    </service>
    ...
<application>

Acessar os modelos de mapa

Os apps de PDI podem acessar o PlaceListMapTemplate e MapWithContentTemplate.

O PlaceListMapTemplate foi projetado especificamente para mostrar uma lista de PDIs e um mapa renderizado pelo host.

O MapWithContentTemplate pode ser usado para mostrar listas e outros tipos de conteúdo ao lado de um mapa renderizado pelo app. Consulte Desenhar mapas para mais detalhes sobre o uso desse modelo.

Para acessar esses modelos, seu app precisa declarar a permissão androidx.car.app.MAP_TEMPLATES no arquivo AndroidManifest.xml:

<manifest ...>
  ...
  <uses-permission android:name="androidx.car.app.MAP_TEMPLATES"/>
  ...
</manifest>

Atualizar conteúdo do PlaceListMapTemplate

Você pode oferecer aos motoristas uma maneira de atualizar o conteúdo tocando em um botão enquanto navegam em listas de lugares criadas com PlaceListMapTemplate. Implemente o OnContentRefreshListener da interface onContentRefreshRequested e use PlaceListMapTemplate.Builder.setOnContentRefreshListener para definir o listener no modelo e ativar a atualização da lista.

O snippet a seguir mostra como definir o listener no modelo:

return PlaceListMapTemplate.Builder()
    // ...
    .setOnContentRefreshListener {
        // Execute any desired logic
        // ...
        // Then call invalidate() so onGetTemplate() is called again
        invalidate()
    }
    .build()

O botão de atualização só aparece no cabeçalho do PlaceListMapTemplate quando o listener tem um valor.

Quando o usuário clica no botão, o método onContentRefreshRequested da implementação do seu OnContentRefreshListener é chamado. No onContentRefreshRequested, chame o Screen.invalidate método. Em seguida, o host vai chamar o método Screen.onGetTemplate do app para recuperar o modelo com o conteúdo atualizado. Consulte Atualizar o conteúdo de um modelo para mais informações sobre a atualização de modelos. Contanto que o próximo modelo retornado por onGetTemplate seja do mesmo tipo, ele será contabilizado como uma atualização, e não na cota do modelo.

Integrar com o Google Assistente usando as Ações no app

Ative por voz o app de PDI usando o Google Assistente para que os usuários possam pesquisar pontos de interesse fazendo pedidos como "Ok Google, encontre estações de recarga por perto no ExampleApp". Para conferir instruções detalhadas, consulte Ações no app para carros.