手机闪光灯打开xamarin,但它没有打开,为什么

本文关键字:为什么 xamarin 手机 闪光灯 | 更新日期: 2023-09-27 18:20:27

我的应用程序被允许使用闪光灯和相机,但它没有打开。该设备是Nexus Samsung。我尝试设置FlashModeOn,但它不起作用。请帮帮我。

[Activity(Label = "TurnOnLight", MainLauncher = true, Icon = "@drawable/icon")]
public class Activity1 : Activity
{
    public void initCamera()
    {

        var b = FindViewById<Button>(Resource.Id.MyButton);
        try
        {
            if (!hasCamera)
            {
                mcamera = Camera.Open();
                hasCamera = true;
                p=mcamera.GetParameters();
                var s = p.Get(Camera.Parameters.FlashModeOn);
                   p.Set(Camera.Parameters.FlashModeTorch,0);
                   mcamera.SetParameters(p);

                mcamera.StartPreview();
            }
            else
            {
            }
        }
        catch (Exception exception)
        {
            hasCamera = false;
        }
    }

手机闪光灯打开xamarin,但它没有打开,为什么

这是我在ZXing.Net.Mobile项目中使用的代码,它对我来说运行良好。请记住,FlashModeOn与FlashModeTorch:略有不同

https://github.com/Redth/ZXing.Net.Mobile/blob/master/src/ZXing.Net.Mobile/MonoForAndroid/ZXingSurfaceView.cs#L227-L267

public void Torch(bool on)
{
    if (!this.Context.PackageManager.HasSystemFeature(PackageManager.FeatureCameraFlash))
    {
        Android.Util.Log.Info("ZXING", "Flash not supported on this device");
        return;
    }
    if (camera == null)
    {
        Android.Util.Log.Info("ZXING", "NULL Camera");
        return;
    }
    var p = camera.GetParameters();
    var supportedFlashModes = p.SupportedFlashModes;
    if (supportedFlashModes == null)
        supportedFlashModes = new List<string>();
    var flashMode=  string.Empty;
    if (on)
    {
        if (supportedFlashModes.Contains(Android.Hardware.Camera.Parameters.FlashModeTorch))
            flashMode = Android.Hardware.Camera.Parameters.FlashModeTorch;
        else if (supportedFlashModes.Contains(Android.Hardware.Camera.Parameters.FlashModeOn))
            flashMode = Android.Hardware.Camera.Parameters.FlashModeOn;
    }
    else 
    {
        if ( supportedFlashModes.Contains(Android.Hardware.Camera.Parameters.FlashModeOff))
            flashMode = Android.Hardware.Camera.Parameters.FlashModeOff;
    }
    if (!string.IsNullOrEmpty(flashMode))
    {
        p.FlashMode = flashMode;
        camera.SetParameters(p);
    }
}