xamarin 表单 - 如何获取屏幕亮度和串行端口?

xamarin forms - how get screen brightness and serial ports?

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

如果想获得亮度,使用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 是来自 activity 的实例:

public static MainActivity thisMainActivity;

onCreate方法:

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 ).And a sample project你可以看看