namespace Unity.RenderStreaming { #if UNITY_ANDROID && !UNITY_EDITOR public class AndroidImagePicker : MonoBehaviour { private static AndroidImagePicker _instance; private Action _callback; private AndroidJavaObject _activity; private bool _waitingForResult; private string _pickedImagePath; public static AndroidImagePicker Instance { get { if (_instance == null) { var go = new GameObject(nameof(AndroidImagePicker)); DontDestroyOnLoad(go); _instance = go.AddComponent(); } return _instance; } } public void PickImage(Action onImagePicked) { _callback = onImagePicked; using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { _activity = unityPlayer.GetStatic("currentActivity"); } _activity.Call("runOnUiThread", new AndroidJavaRunnable(() => { using (AndroidJavaObject intent = new AndroidJavaObject("android.content.Intent", "android.intent.action.PICK")) { intent.Call("setType", "image/*"); using (AndroidJavaObject i = intent.Call("createChooser", _activity, "选择头像")) { _activity.Call("startActivity", i); } } })); _waitingForResult = true; } private void Update() { if (!_waitingForResult) return; try { if (_activity == null) return; using (AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri")) { } } catch { // ignored } } } #endif }