如何改变xamarin形式的屏幕亮度

The*_*ang 0 c# xamarin.forms

我有xrrin形式的qr页面,我想要的是当qr显示时屏幕亮度会更亮,我无法找到解决方案.我在互联网上找到了一些代码,但它返回了一些错误代码信息

编辑:我删除了源代码,因为它看起来像让一些人困惑,我尝试的代码是为xamarin android,这就是为什么它没有为我工作(我认为xamarin.android和xamarin.forms代码几乎相同,这就是为什么我复制代码并将其粘贴到xamarin表单中并得到一些错误消息).而现在我真正的问题是如何通过xamarin表单更改屏幕亮度我们可以这样做吗?如果是的话,我可以尝试任何链接谢谢

Pau*_*her 7

Xamarin.Forms 不是平台抽象,而是UI抽象.因此,无法访问屏幕亮度等系统服务.我也没有找到NuGet来实现这一目标,因此你必须实现平台特定的类来调整屏幕亮度并解决问题DependencyService.

在PCL中实现接口

public interface IBrightnessService
{
    void SetBrightness(float factor);
}
Run Code Online (Sandbox Code Playgroud)

并使用DependencyService从您的公共项目到您的平台特定实现的接口操作

var brightnessService = DependencyService.Get<IBrightnessService>();
brightnessService.SetBrightness(.2);
Run Code Online (Sandbox Code Playgroud)

有关如何使用DependencyService的非常好的紧凑示例,请参阅此页面

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/dependency-service/introduction

Android的

您的错误消息

非静态字段,方法或属性'Windows.Attribute'需要Object

表示您尝试访问类型,就像它是一个对象.你需要一个有Window:Window对象的上下文,MainActivity例如你的情况.

当你在另一个上下文中时,你需要以Window某种方式获得一个实例.预先2.5这是可能的

var window = ((Activity)Forms.Context).Window;
Run Code Online (Sandbox Code Playgroud)

这仍然有效,但已被弃用.无论如何,你可以使用CurrentActivity插件,并获得Window

var window = CrossCurrentActivity.Current.Activity.Window;
Run Code Online (Sandbox Code Playgroud)

(来源)

using Xamarin.Forms;

[assembly: Dependency(typeof (AndroidBrightnessService))]

public class AndroidBrightnessService : IBrightnessService
{
    public void SetBrightness(float brightness)
    {
        var window = CrossCurrentActivity.Current.Activity.Window;
        var attributesWindow = new WindowManagerLayoutParams();

        attributesWindow.CopyFrom (window.Attributes);
        attributesWindow.ScreenBrightness = brightness;

        window.Attributes = attributesWindow;
    }
}
Run Code Online (Sandbox Code Playgroud)

iOS版

使用UIScreen.MainScreen.Brightness调节亮度.

using Xamarin.Forms;
using UIKit;

[assembly: Dependency(typeof (iOSBrightnessService))]

public class iOSBrightnessService : IBrightnessService
{
    public void SetBrightness(float brightness)
    {
        UIScreen.MainScreen.Brightness = brightness;
    }
}
Run Code Online (Sandbox Code Playgroud)