Files
webRtc/Assets/Script/ AndroidImagePicker.cs
2026-05-17 11:35:43 +08:00

70 lines
2.1 KiB
C#

namespace Unity.RenderStreaming
{
#if UNITY_ANDROID && !UNITY_EDITOR
public class AndroidImagePicker : MonoBehaviour
{
private static AndroidImagePicker _instance;
private Action<Texture2D> _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<AndroidImagePicker>();
}
return _instance;
}
}
public void PickImage(Action<Texture2D> onImagePicked)
{
_callback = onImagePicked;
using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
_activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
}
_activity.Call("runOnUiThread", new AndroidJavaRunnable(() =>
{
using (AndroidJavaObject intent = new AndroidJavaObject("android.content.Intent",
"android.intent.action.PICK"))
{
intent.Call<AndroidJavaObject>("setType", "image/*");
using (AndroidJavaObject i = intent.Call<AndroidJavaObject>("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
}