我有qr页面的xamarin形式,我想要的是,当qr是显示屏幕亮度将更亮,我找不到解决办法。我在互联网上找到了一些代码,但它返回时还带有一些错误代码信息。
编辑:我删除了源代码,因为它看起来让一些人感到困惑,我尝试的代码是针对xamarin.android的,这就是为什么它对我无效的原因(我认为xamarin.android和xamarin.forms代码几乎一样,这就是为什么我复制代码并将其粘贴到xamarin表单中,并得到了一些错误消息)。现在,我真正的问题是,如何通过xamarin形式改变屏幕亮度,我们能做到吗?如果是的话,那我怎么能试一下呢,谢谢
发布于 2017-12-12 10:27:21
Xamarin.Forms不是平台抽象,而是UI抽象。因此,无法访问像屏幕亮度这样的系统服务。我也没有找到一个NuGet来实现这一点,因此您必须实现特定于平台的类来通过DependencyService
来调整屏幕亮度和解析。
在PCL中实现接口
public interface IBrightnessService
{
void SetBrightness(float factor);
}
并使用从公共项目到平台特定实现的DependencyService
接口操作。
var brightnessService = DependencyService.Get<IBrightnessService>();
brightnessService.SetBrightness(.2);
有关如何使用DependencyService的一个非常好的紧凑示例,请参阅此页面
安卓
您的错误消息
非静态字段、方法或属性“Windows.Attribute”需要对象。
意味着您试图访问一个类型,就好像它是一个对象一样。您需要有一个Window:Window
对象的上下文,例如在您的MainActivity
中就是这样。
当您处于另一个上下文中时,您将需要以某种方式获得Window
的实例。在2.5之前,这是可能的
var window = ((Activity)Forms.Context).Window;
这仍然有效,但不受欢迎。无论如何,您可以使用插件并获得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;
}
}
发布于 2021-07-14 21:29:35
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;
}
https://stackoverflow.com/questions/47769514
复制相似问题