52 lines
1.7 KiB
C#
52 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
|
||
|
|
// 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);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|