我在xamarin表格中有qr页面,我想要的是当qr显示时屏幕亮度会更亮,我无法找到解决方案。我在互联网上找到了一些代码,但它返回了一些错误代码消息
已编辑: 我删除了源代码,因为它看起来像是让一些人感到困惑,我尝试的代码是xamarin android,这就是为什么它对我不起作用(我认为xamarin.android和xamarin.forms代码几乎相同,这就是为什么我复制代码并将其粘贴到xamarin表单中并得到一些错误消息)。而现在我真正的问题是如何通过xamarin表单更改屏幕亮度我们可以这样做吗?如果是的话,我可以尝试任何链接,谢谢
答案 0 :(得分:7)
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”
需要Object
表示您尝试访问类型,就像它是一个对象一样。您需要一个存在Window:Window
对象的上下文,例如MainActivity
就是这种情况。
当你在另一个上下文中时,你需要以某种方式获得Window
的实例。
var window = ((Activity)Forms.Context).Window;
这仍然有效,但已被弃用。无论如何,您可以使用CurrentActivity plugin并使用
获取Window
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;
}
}
使用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;
}
}
答案 1 :(得分:0)
安卓:
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;
}