微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 移动闪光灯使用xamarin打开但是没有转动,为什么?

我的应用程序允许使用闪光灯和相机,但它没有打开.该设备是Nexus三星.
我尝试设置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;
        }

    }

解决方法

这是我在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);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐