52 lines
1.7 KiB
C#
Raw Normal View History

2026-04-28 16:35:51 +08:00
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
// iOS 需要写原生插件
_StartScanIOS();
#endif
}
#if UNITY_IOS
[System.Runtime.InteropServices.DllImport("__Internal")]
private static extern void _StartScanIOS();
#endif
/// <summary>
/// 接收扫码结果(从原生回调)
/// </summary>
public void OnScanResult(string result)
{
Debug.Log($"[NativeQRScanner] 扫码结果: {result}");
OnQRCodeScanned?.Invoke(result);
}
}
}