2026-06-22 17:05:53 +08:00

51 lines
1.7 KiB
C#

using System;
using UnityEngine;
namespace Kill.UI.Pages
{
/// <summary>
/// 原生二维码扫描 - 调用系统相机扫码
/// </summary>
public class NativeQRScanner : MonoBehaviour
{
// 扫码结果回调
public event Action<string> OnQRCodeScanned;
/// <summary>
/// 开始扫码
/// </summary>
public void StartScan()
{
#if UNITY_EDITOR
// 编辑器模拟
Debug.Log("[NativeQRScanner] 编辑器模式,模拟扫码");
// 可以弹窗输入测试
#elif UNITY_ANDROID
using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
using (AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
using (AndroidJavaObject intent = new AndroidJavaObject("android.content.Intent", "com.google.zxing.client.android.SCAN"))
{
intent.Call<AndroidJavaObject>("putExtra", "SCAN_MODE", "QR_CODE_MODE");
currentActivity.Call("startActivityForResult", intent, 0);
}
#elif UNITY_IOS
_StartScanIOS(gameObject.name);
#endif
}
#if UNITY_IOS
[System.Runtime.InteropServices.DllImport("__Internal")]
private static extern void _StartScanIOS(string gameObjectName);
#endif
/// <summary>
/// 接收扫码结果(从原生回调)
/// </summary>
public void OnScanResult(string result)
{
Debug.Log($"[NativeQRScanner] 扫码结果: {result}");
OnQRCodeScanned?.Invoke(result);
}
}
}