首页 > 解决方案 > xamarin 形式 - 如何获得屏幕亮度和串行端口?

问题描述

我想创建一个页面,显示设备的所有硬件,包括亮度和串口。我应该怎么做?

标签: c#xamarin.formsscreenbrightness

解决方案


如果想获得亮度,使用DependencyService将是一个好方法。

首先实现接口:

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

然后在要获取或设置方法的表单中:

放:

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

得到:

var brightnessService = DependencyService.Get<IBrightnessService>();
Console.WriteLine("brightness is:" + brightnessService.GetBrightness());

在 Android 中,创建AndroidBrightnessService

[assembly: Xamarin.Forms.Dependency(typeof(AndroidBrightnessService))]
namespace App6.Droid
{
    public class AndroidBrightnessService : IBrightnessService
    {
        [Obsolete]
        public float GetBrightness()
        {
            //throw new NotImplementedException();
            //var window = ((Activity)Forms.Context).Window;

            //var attributesWindow = new WindowManagerLayoutParams();

            //attributesWindow.CopyFrom(window.Attributes);

            var brightness = Android.Provider.Settings.System.GetInt(MainActivity.thisMainActivity.ContentResolver, Android.Provider.Settings.System.ScreenBrightness);
            //MainActivity.thisMainActivity is a isntance from activity
            //The returned brightness is an int type value between 0 and 255.
            return brightness;
        }

        [Obsolete]
        public void SetBrightness(float brightness)
        {
            //throw new NotImplementedException();
            var window = ((Activity)Forms.Context).Window;
            //var window = CrossCurrentActivity.Current.Activity.Window;
            var attributesWindow = new WindowManagerLayoutParams();

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

            window.Attributes = attributesWindow;
        }
    }
}

注意: MainActivity.thisMainActivity 是来自活动的实例:

public static MainActivity thisMainActivity;

创建方法:

thisMainActivity = this;

在 IOS 中,Cretae iOSBrightnessService

[assembly: Dependency(typeof(iOSBrightnessService))]
namespace App6.iOS
{
    public class iOSBrightnessService : IBrightnessService
    {
        public float GetBrightness()
        {
            //throw new NotImplementedException();
            return (float)UIScreen.MainScreen.Brightness;
        }

        public void SetBrightness(float brightness)
        {
            //throw new NotImplementedException();
            UIScreen.MainScreen.Brightness = brightness;
        }
    }
}

注意:App6 是我的项目的名称。

==================================================== ============================

关于串口,我的项目中没有用到,不过这个应该只存在于android中。我认为这需要一些库(如.so文件)在DependencyService的基础上引用。

这是一个可以参考的 Nuget 包(Xamarin.Android.SerialPort)。还有一个 示例项目,您可以看看。


推荐阅读