Files
VIVE-OpenXR-Unity/com.htc.upm.vive.openxr/Runtime/Toolkits/Spectator/Scripts/Helper/AndroidProcessHelper.cs
2025-01-10 17:17:03 +08:00

82 lines
3.3 KiB
C#

// Copyright HTC Corporation All Rights Reserved.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Android;
namespace VIVE.OpenXR.Toolkits.Spectator.Helper
{
public static class AndroidProcessHelper
{
private static AndroidJavaObject _activity;
public static AndroidJavaObject Activity
{
get
{
if (_activity != null)
{
return _activity;
}
var unityPlayer = new AndroidJavaClass(ANDROID_CLASS_UNITY_PLAYER);
_activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
return _activity;
}
}
// Reference: https://stackoverflow.com/q/58728596/10467387
public static IEnumerator RequestPermission(Dictionary<string, PermissionCallbacks> permissions)
{
var permissionGranted = Enumerable.Repeat(false, permissions.Count).ToList();
var permissionAsked = Enumerable.Repeat(false, permissions.Count).ToList();
var permissionAction = new List<Action>();
for (var i = 0; i < permissions.Count; i++)
{
int currentCount = i;
(string permission, PermissionCallbacks permissionCallbacks) = permissions.ElementAt(currentCount);
permissionAction.Add(() =>
{
permissionGranted[currentCount] = Permission.HasUserAuthorizedPermission(permission);
if (permissionGranted[currentCount] || permissionAsked[currentCount])
{
return;
}
Permission.RequestUserPermission(permission, permissionCallbacks);
permissionAsked[currentCount] = true;
});
}
for (var i = 0; i < permissions.Count;)
{
permissionAction[i].Invoke();
if (permissionAsked[i])
{
i++;
}
yield return new WaitForEndOfFrame();
}
}
public const string ANDROID_CLASS_UNITY_PLAYER = "com.unity3d.player.UnityPlayer";
public const string ANDROID_CLASS_MEDIA_STORE_IMAGE_MEDIA = "android.provider.MediaStore$Images$Media";
public const string ANDROID_CLASS_GRAPHICS_BITMAP_FACTORY = "android.graphics.BitmapFactory";
public const string ANDROID_CLASS_GRAPHICS_BITMAP_COMPRESS_FORMAT = "android.graphics.Bitmap$CompressFormat";
public const string ANDROID_CLASS_OS_ENVIRONMENT = "android.os.Environment";
public const string ANDROID_CLASS_OS_BUILD_VERSION = "android.os.Build$VERSION";
public const string ANDROID_CLASS_CONTENT_INTENT = "android.content.Intent";
public const string ANDROID_CLASS_CONTENT_VALUES = "android.content.ContentValues";
public const string ANDROID_CLASS_NET_URI = "android.net.Uri";
public const string JAVA_CLASS_IO_FILE = "java.io.File";
public const string JAVA_CLASS_IO_OUTPUTSTREAM = "java.io.OutputStream";
public const string JAVA_CLASS_IO_BYTEARRAYOUTPUTSTREAM = "java.io.ByteArrayOutputStream";
public const string JAVA_CLASS_IO_BYTEARRAYINPUTSTREAM = "java.io.ByteArrayInputStream";
}
}