Développement
Développement
Sélectionnez votre plateforme

Autorisation d’accès aux données spatiales

Présentation

Nous avons introduit une nouvelle autorisation qui permet aux utilisateur·ices de contrôler quelle application peut accéder à leurs données spatiales. Cette autorisation concerne les applications fonctionnant sur le Quest 2, le Quest Pro et le Quest 3. Pour en savoir plus, consultez la page Demander des autorisations d’exécution.
Au moment d’exécuter une application dont vous souhaitez qu’elle utilise l’API Scene, vous devez demander une autorisation d’accès aux données spatiales. La requête affichera une boîte de dialogue unique d’explication des autorisations, suivie d’une boîte de dialogue de confirmation de l’autorisation accordée. Ce n’est que lorsque l’utilisateur ou l’utilisatrice aura donné son accord que les applications pourront interroger toutes les données spatiales de son appareil.
An illustration of the permission flow UX.

Appareils

L’accès aux données spatiales via le nouveau flux d’autorisations est disponible sur le Quest 2, le Quest Pro et le Quest 3.
Vous n’avez pas besoin de demander une autorisation d’exécution de scène lors du développement d’applications via Link. Les applications fonctionnant depuis Link continueront d’accéder aux données spatiales lors de la demande d’ancrages sur l’appareil.

Déclarer l’autorisation

Dans le fichier AndroidManifest.xml de votre application, déclarez l’autorisation suivante :
<uses-permission android:name="com.oculus.permission.USE_SCENE" />

Quand demander une autorisation

Selon les règles d’autorisation sur Android, il est recommandé de ne demander l’autorisation que lorsque la fonctionnalité est utilisée et de fournir une redirection si l’utilisateur ou l’utilisatrice décide de ne pas accorder l’autorisation.
Si l’application est compilée avec les versions actuelles du SDK, alors la demande d’autorisation sera facultative dans l’application. Le système affichera automatiquement une boîte de dialogue d’autorisation dès le lancement de l’application.

Procédure à suivre pour demander une autorisation

Demander une autorisation en Java via NativeActivity :
package com.oculus.test.permissionTestApp;

import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends android.app.NativeActivity {
  private static final String PERMISSION_USE_SCENE = "com.oculus.permission.USE_SCENE";
  private static final int REQUEST_CODE_PERMISSION_USE_SCENE = 1;

static {
  System.loadLibrary("openxr_loader");
  System.loadLibrary("permissionTestApp");
}


@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  requestScenePermissionIfNeeded();
}

private void requestScenePermissionIfNeeded() {
if (checkSelfPermission(PERMISSION_USE_SCENE) !=      PackageManager.PERMISSION_GRANTED) {
  requestPermissions(new String[] {PERMISSION_USE_SCENE}, REQUEST_CODE_PERMISSION_USE_SCENE);
}
}
}
Demander une autorisation en C++ via JNI :
static bool checkAndMaybeRequestPermission(JNIEnv* env, jobject activityObject) {
  jstring strPermission = env->NewStringUTF("com.oculus.permission.USE_SCENE");
  jobject objPermission = env->NewLocalRef(strPermission);

  // Check if we already have the permission
  jclass clsActivity = env->FindClass("android/app/Activity");

  jmethodID methodCheckSelfPermission = env->GetMethodID(clsActivity, "checkSelfPermission", "(Ljava/lang/String;)I");

  jint intPermissionResult = env->CallIntMethod(activityObject, methodCheckSelfPermission, objPermission);

  jclass clsPackageManager = env->FindClass("android/content/pm/PackageManager");

  jfieldID fidPermissionGranted = env->GetStaticFieldID(clsPackageManager, "PERMISSION_GRANTED", "I");

  jint intPermissionGranted = env->GetStaticIntField(clsPackageManager, fidPermissionGranted);
  if (intPermissionResult == intPermissionGranted) {
    return true;
  }

  // Request the permission
  jmethodID methodRequestPermissions = env->GetMethodID(clsActivity, "requestPermissions", "([Ljava/lang/String;I)V");

  jclass clsString = env->FindClass("java/lang/String");
  jobjectArray objArrayPermissionStrings = env->NewObjectArray(1, clsString, objPermission);

  jint requestCode = 0;
  env->CallVoidMethod(activityObject, methodRequestPermissions, objArrayPermissionStrings, requestCode);
  return true;
}
Si les utilisateur·ices n’accordent pas l’autorisation d’accès aux données spatiales, la fonction XrQuerySpacesFB ne renverra pas de XrSpace. Ce comportement se produira indépendamment du filtre appliqué. Plus précisément, la fonction XrQuerySpacesFB ne retournera pas de XrSpace contenant la fonction XrSpaceComponentTypeFB suivante. Cela se vérifiera même si l’appareil de l’utilisateur·ice a capturé une scène :
  • XR_SPACE_COMPONENT_TYPE_BOUNDED_2D_FB
  • XR_SPACE_COMPONENT_TYPE_BOUNDED_3D_FB
  • XR_SPACE_COMPONENT_TYPE_SEMANTIC_LABELS_FB
  • XR_SPACE_COMPONENT_TYPE_ROOM_LAYOUT_FB
  • XR_SPACE_COMPONENT_TYPE_SPACE_CONTAINER_FB
  • XR_SPACE_COMPONENT_TYPE_TRIANGLE_MESH_METAX1
Logo nav.
Français (France)
©2026 Meta