简体   繁体   中英

How to change screen brightness in xamarin forms

I have qr page in xamarin forms, and what i want is when the qr is shows up the screen brightness will be brighter, and i cant find solutions for that. i found some code in internet but it return with some error code message

EDITED : I deleted the source code because its look like make some people confused, the code that i tried is for xamarin android and thats why it didnt work for me (I thought the xamarin.android and xamarin.forms code is almost same thats why i copy the code and paste it in xamarin forms and got some error message). And now my Real question is How to Change the screen brightness via xamarin Forms can we do that ? if yes how any link that can i try thanks

Xamarin.Forms is not a platform abstraction, but a UI abstraction. Hence there is no access to system services like the screen brightness. Neither did I find a NuGet to achieve this, hence you'll have to implement platform specific classes to adjust the screen brightness and resolve via DependencyService .

Implement the interface in your PCL

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

and use that interface operations using DependencyService from your common project to your platform specific implementation

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

For a very good compact example of how to use DependencyService see this page

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

Android

Your error message

An Object is required for the non static field, method , or property 'Windows.Attribute'

means that you are trying to access a type as if it was an object. You need a context in which there is a Window:Window object, this would be the case in your MainActivity for instance.

When you are in another context you'll need to obtain an instance of Window somehow. Pre 2.5 this was possible with

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

This still works, but is deprecated. Anyway, you could use the CurrentActivity plugin and get the Window with

var window = CrossCurrentActivity.Current.Activity.Window;

( source )

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

Use UIScreen.MainScreen.Brightness to adjust the brightness.

using Xamarin.Forms;
using UIKit;

[assembly: Dependency(typeof (iOSBrightnessService))]

public class iOSBrightnessService : IBrightnessService
{
    public void SetBrightness(float brightness)
    {
        UIScreen.MainScreen.Brightness = brightness;
    }
}

Android:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM