Как я могу сделать снимок в приложении VR Android? - PullRequest
0 голосов
/ 26 февраля 2020

Вот моя история.
Я разрабатываю приложение VR с Unity, работаю над телефоном Android с Samsung Gear VR. В этом приложении я хочу иметь возможность:

  1. Показывать живое видео с камеры (уже сделано с помощью веб-камеры)
  2. Сделать снимок. Не скриншот из WebcamTexture (это легко), а изображение в полном разрешении, сделанное непосредственно с камеры ! Здесь начинается сложная часть ...

В идеале приложение должно делать автофокусную фотографию в фоновом режиме и просто сохранять изображение в формате JPG в локальной памяти. Мое приложение справится с этим.

Вот что я сделал до сих пор:

Я попробовал эти библиотеки без успеха:

Поэтому я решил создать собственную библиотеку Android, скомпилированную в AAR, используя этот метод . Вот код моей библиотеки, он довольно прост:

package fr.mycompany.phototaker;

public class PhotoTaker {

    public static void takePhoto() {

        Log.d("PHOTOTAKER", "------- Take photo");

        File imagePath = new File(UnityPlayer.currentActivity.getFilesDir(), "images");
        File newFile = new File(imagePath, "Image_new.jpg");
        Uri contentUri = FileProvider.getUriForFile(UnityPlayer.currentActivity, "fr.mycompany.phototaker.fileprovider", newFile);


        // Utilisation de l'application par défaut pour utiliser la caméra
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri);

        UnityPlayer.currentActivity.startActivity(intent);
    }
}

И я звоню из Unity:

photoTaker = new AndroidJavaClass("fr.mycompany.phototaker.PhotoTaker");
[...]
photoTaker.CallStatic("takePhoto");

Но Android не позволит мне сделать это. Видимо, я не могу начать "не VR" деятельность с подключенным GearVR. Вот ошибка, которую я получаю:

Warn ActivityManager: GearVR состыкован: не разрешено запускать активность без VR. Activity = ComponentInfo {com.se c. android .app.camera / com.se c. android .app.camera.Camera} intent = Intent {act = android .media.action. IMAGE_CAPTURE flg = 0x3 cmp = com.se c. android .app.camera / .Camera launchParam = MultiScreenLaunchParams {mDisplayId = 0 mFlags = 0} clip = {text / uri-list U: content: // fr. mycompany.phototaker.fileprovider / local_images / Image_new.jpg} (имеет дополнительные функции)} isVrActivity = false

У меня заканчиваются варианты ... Есть идеи?

Большое спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...