簡體   English   中英

如何以 xamarin 形式更改屏幕亮度

[英]How to change screen brightness in xamarin forms

我有 xamarin 形式的 qr 頁面,我想要的是當 qr 出現時屏幕亮度會更亮,我找不到解決方案。 我在互聯網上找到了一些代碼,但它返回了一些錯誤代碼消息

編輯:我刪除了源代碼,因為它看起來像讓一些人感到困惑,我嘗試的代碼適用於 xamarin android,這就是為什么它對我不起作用(我認為 xamarin.android 和 xamarin.forms 代碼幾乎相同,這就是為什么我復制了代碼並將其粘貼到 xamarin 表單中,並收到了一些錯誤消息)。 現在我真正的問題是如何通過 xamarin Forms 更改屏幕亮度我們可以這樣做嗎? 如果是的話,我可以嘗試什么鏈接,謝謝

Xamarin.Forms不是平台抽象,而是 UI 抽象。 因此無法訪問屏幕亮度等系統服務。 我也沒有找到 NuGet 來實現這一點,因此您必須實現平台特定的類來調整屏幕亮度並通過DependencyService解決。

在您的 PCL 中實現接口

public interface IBrightnessService
{
    void SetBrightness(float factor);
}

並使用DependencyService從您的公共項目到您的平台特定實現使用該接口操作

var brightnessService = DependencyService.Get<IBrightnessService>();
brightnessService.SetBrightness(.2);

有關如何使用 DependencyService 的非常好的緊湊示例,請參閱此頁面

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

安卓

你的錯誤信息

非靜態字段、方法或屬性“Windows.Attribute”需要一個對象

意味着您正在嘗試訪問一個類型,就好像它是一個對象一樣。 您需要一個上下文,其中有一個Window:Window對象,例如在MainActivity就是這種情況。

當您在另一個上下文中時,您需要以某種方式獲取Window的實例。 在 2.5 之前,這可以通過

var window = ((Activity)Forms.Context).Window;

這仍然有效,但已棄用。 無論如何,你可以使用CurrentActivity插件並獲得Window

var window = CrossCurrentActivity.Current.Activity.Window;

來源

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;
    }
}

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;
    }
}

安卓:

    public void SetBrightness(float brightness)
    {
        Window window = (MainActivity.Instance as Activity).Window;
        var attributesWindow = new WindowManagerLayoutParams();

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

        window.Attributes = attributesWindow;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM