Ative a RA para usar recursos de realidade aumentada no seu app novo ou existente.
Configurar o app para ser obrigatório ou opcional para RA
Para economizar espaço em dispositivos individuais, todos os recursos de RA são armazenados em um app chamado Google Play Services para RA, que é atualizado separadamente pela Play Store. Os apps Android que usam recursos de RA se comunicam com o Google Play Services para RA usando o SDK do ARCore. Um app compatível com recursos de RA pode ser configurado de duas maneiras: RA necessária e RA opcional. Essa designação determina como o app interage com o Google Play Services para apps de RA.
Um app RA necessário não pode funcionar sem o ARCore. É necessário um dispositivo com suporte ao ARCore que tenha o Google Play Services para RA instalado.
- A Google Play Store só vai disponibilizar apps com a exigência de RA em dispositivos compatíveis com o ARCore.
- Quando os usuários instalam um app com essa exigência, a Google Play Store instala automaticamente o Google Play Services para RA no dispositivo. No entanto, o app ainda precisará realizar mais verificações no tempo de execução caso o Google Play Services para RA esteja desatualizado ou tenha sido desinstalado manualmente.
Um app AR opcional usa o ARCore para melhorar a funcionalidade existente. Ele tem recursos de RA opcionais que são ativados apenas em dispositivos compatíveis com o ARCore que têm o Google Play Services para RA instalado.
- Os apps opcionais de RA podem ser instalados e executados em dispositivos que não oferecem suporte ao ARCore.
- Quando os usuários instalam um app opcional de RA, a Google Play Store não instala o Google Play Services para RA no dispositivo automaticamente.
RA necessária | RA (opcional) | |
---|---|---|
Uso de recursos de RA | Seu app precisa do ARCore para a funcionalidade básica. | O ARCore aumenta a funcionalidade do seu app. O app pode ser executado sem suporte ao ARCore. |
Visibilidade na Play Store | O app só está listado na Play Store em dispositivos com suporte ao ARCore. | O app segue os procedimentos normais de inclusão. |
Método de instalação do Google Play Services para RA | A Play Store instala o Google Play Services para RA junto com o app. | Seu app usa
ArCoreApk.requestInstall()
para fazer o download e instalar o ARCore. |
Requisitos do Android minSdkVersion |
Android 7.0 (nível 24 da API) | Android 4.4 (nível 19 da API), embora executar qualquer funcionalidade de RA exija pelo menos o Android 7.0 (nível 24 da API). |
É necessário usar ArCoreApk.checkAvailability() ou ArCoreApk.checkAvailabilityAsync() para verificar o suporte ao ARCore e o status da instalação
|
||
Deve usar
ArCoreApk.requestInstall()
para instalar o Google Play Services para RA |
Para tornar o app obrigatório ou opcional para RA, atualize o AndroidManifest.xml
para incluir as seguintes entradas:
RA obrigatório
<uses-permission android:name="android.permission.CAMERA" />
<!-- Limits app visibility in the Google Play Store to ARCore supported devices
(https://developers.google.com/ar/devices). -->
<uses-feature android:name="android.hardware.camera.ar" />
<application …>
…
<!-- "AR Required" app, requires "Google Play Services for AR" (ARCore)
to be installed, as the app does not include any non-AR features. -->
<meta-data android:name="com.google.ar.core" android:value="required" />
</application>
RA opcional
<uses-permission android:name="android.permission.CAMERA" />
<!-- If your app was previously AR Required, don't forget to remove the
`<uses-feature android:name="android.hardware.camera.ar" />` entry, as
this would limit app visibility in the Google Play Store to only
ARCore supported devices. -->
<application …>
…
<!-- "AR Optional" app, contains non-AR features that can be used when
"Google Play Services for AR" (ARCore) is not available. -->
<meta-data android:name="com.google.ar.core" android:value="optional" />
</application>
Em seguida, modifique a build.gradle
do app para especificar uma minSdkVersion
de pelo menos 24
:
android {
defaultConfig {
…
minSdkVersion 24
}
}
Adicionar dependências de compilação
Para adicionar o ARCore ao seu projeto do Android Studio, faça o seguinte:
Verifique se o arquivo
build.gradle
do projeto inclui o repositório Maven do Google.allprojects { repositories { google() … } }
Adicione a biblioteca ARCore mais recente como uma dependência no arquivo
build.gradle
do app.dependencies { … implementation 'com.google.ar:core:1.33.0' }
Realizar verificações no ambiente de execução
Durante o tempo de execução, faça o seguinte para garantir que os recursos de RA do app funcionem sem problemas.
Verificar se o ARCore é compatível
Os apps com e sem RA obrigatórios precisam usarArCoreApk.checkAvailability()
ou ArCoreApk.checkAvailabilityAsync()
para determinar se o dispositivo atual oferece suporte ao ARCore. Em dispositivos que não são compatíveis com o ARCore, os apps precisam desativar as funcionalidades relacionadas à RA e ocultar os elementos de interface associados.
Kotlin
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Enable AR-related functionality on ARCore supported devices only.
maybeEnableArButton()
…
}
fun maybeEnableArButton() {
ArCoreApk.getInstance().checkAvailabilityAsync(this) { availability ->
if (availability.isSupported) {
mArButton.visibility = View.VISIBLE
mArButton.isEnabled = true
} else { // The device is unsupported or unknown.
mArButton.visibility = View.INVISIBLE
mArButton.isEnabled = false
}
}
}
Java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Enable AR-related functionality on ARCore supported devices only.
maybeEnableArButton();
…
}
void maybeEnableArButton() {
ArCoreApk.getInstance().checkAvailabilityAsync(this, availability -> {
if (availability.isSupported()) {
mArButton.setVisibility(View.VISIBLE);
mArButton.setEnabled(true);
} else { // The device is unsupported or unknown.
mArButton.setVisibility(View.INVISIBLE);
mArButton.setEnabled(false);
}
});
}
ArCoreApk.checkAvailability()
ou ArCoreApk.checkAvailabilityAsync()
para verificar o suporte ao ARCore garante uma experiência consistente.
O ArCoreApk.checkAvailability()
pode precisar consultar os recursos da rede para determinar se o dispositivo é compatível com o ARCore. Durante esse período, ele retornará UNKNOWN_CHECKING
. Para reduzir a latência e o pop-in percebidos, os apps precisam chamar ArCoreApk.checkAvailability()
uma vez no início do ciclo de vida para iniciar a consulta, ignorando o valor retornado. Dessa forma, um resultado armazenado em cache estará disponível imediatamente quando um elemento da interface de entrada em RA for exibido.
Verificar se o Google Play Services para RA está instalado
Os apps de RA necessários e opcionais precisam usar os dois.
ArCoreApk.requestInstall()
antes de criar uma sessão do ARCore para verificar se uma versão compatível do Google Play Services para RA está (ainda) instalada e garantir que todos os dados necessários de perfil do dispositivo do ARCore tenham sido transferidos por download.
Kotlin
// requestInstall(Activity, true) will triggers installation of
// Google Play Services for AR if necessary.
var mUserRequestedInstall = true
override fun onResume() {
super.onResume()
// Check camera permission.
…
// Ensure that Google Play Services for AR and ARCore device profile data are
// installed and up to date.
try {
if (mSession == null) {
when (ArCoreApk.getInstance().requestInstall(this, mUserRequestedInstall)) {
ArCoreApk.InstallStatus.INSTALLED -> {
// Success: Safe to create the AR session.
mSession = Session(this)
}
ArCoreApk.InstallStatus.INSTALL_REQUESTED -> {
// When this method returns `INSTALL_REQUESTED`:
// 1. ARCore pauses this activity.
// 2. ARCore prompts the user to install or update Google Play
// Services for AR (market://details?id=com.google.ar.core).
// 3. ARCore downloads the latest device profile data.
// 4. ARCore resumes this activity. The next invocation of
// requestInstall() will either return `INSTALLED` or throw an
// exception if the installation or update did not succeed.
mUserRequestedInstall = false
return
}
}
}
} catch (e: UnavailableUserDeclinedInstallationException) {
// Display an appropriate message to the user and return gracefully.
Toast.makeText(this, "TODO: handle exception " + e, Toast.LENGTH_LONG)
.show()
return
} catch (…) {
…
return // mSession remains null, since session creation has failed.
}
…
}
Java
// requestInstall(Activity, true) will trigger installation of
// Google Play Services for AR if necessary.
private boolean mUserRequestedInstall = true;
@Override
protected void onResume() {
super.onResume();
// Check camera permission.
…
// Ensure that Google Play Services for AR and ARCore device profile data are
// installed and up to date.
try {
if (mSession == null) {
switch (ArCoreApk.getInstance().requestInstall(this, mUserRequestedInstall)) {
case INSTALLED:
// Success: Safe to create the AR session.
mSession = new Session(this);
break;
case INSTALL_REQUESTED:
// When this method returns `INSTALL_REQUESTED`:
// 1. ARCore pauses this activity.
// 2. ARCore prompts the user to install or update Google Play
// Services for AR (market://details?id=com.google.ar.core).
// 3. ARCore downloads the latest device profile data.
// 4. ARCore resumes this activity. The next invocation of
// requestInstall() will either return `INSTALLED` or throw an
// exception if the installation or update did not succeed.
mUserRequestedInstall = false;
return;
}
}
} catch (UnavailableUserDeclinedInstallationException e) {
// Display an appropriate message to the user and return gracefully.
Toast.makeText(this, "TODO: handle exception " + e, Toast.LENGTH_LONG)
.show();
return;
} catch (…) {
…
return; // mSession remains null, since session creation has failed.
}
…
}
Pedir permissão para usar a câmera
Os apps opcionais e de RA precisam garantir que a permissão da câmera tenha sido concedida antes de criar uma sessão de RA.
Kotlin
override fun onResume() {
super.onResume()
// ARCore requires camera permission to operate.
if (!CameraPermissionHelper.hasCameraPermission(this)) {
CameraPermissionHelper.requestCameraPermission(this)
return
}
…
}
Java
@Override
protected void onResume() {
super.onResume();
// ARCore requires camera permission to operate.
if (!CameraPermissionHelper.hasCameraPermission(this)) {
CameraPermissionHelper.requestCameraPermission(this);
return;
}
…
}
Sua atividade de RA também precisa implementar onRequestPermissionsResult()
.
Kotlin
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<String>,
results: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, results)
if (!CameraPermissionHelper.hasCameraPermission(this)) {
Toast.makeText(this, "Camera permission is needed to run this application", Toast.LENGTH_LONG)
.show()
if (!CameraPermissionHelper.shouldShowRequestPermissionRationale(this)) {
// Permission denied with checking "Do not ask again".
CameraPermissionHelper.launchPermissionSettings(this)
}
finish()
}
}
Java
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] results) {
super.onRequestPermissionsResult(requestCode, permissions, results);
if (!CameraPermissionHelper.hasCameraPermission(this)) {
Toast.makeText(this, "Camera permission is needed to run this application", Toast.LENGTH_LONG)
.show();
if (!CameraPermissionHelper.shouldShowRequestPermissionRationale(this)) {
// Permission denied with checking "Do not ask again".
CameraPermissionHelper.launchPermissionSettings(this);
}
finish();
}
}
Obedeça aos requisitos de privacidade do usuário
Para publicar seu app na Play Store, verifique se ele está em conformidade com os Requisitos de privacidade do usuário do ARCore.
O que vem em seguida?
- Saiba como configurar uma sessão do ARCore.