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你可以看看
我想创建一个页面来显示设备的所有硬件,包括亮度和串口。我该怎么办?
如果想获得亮度,使用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你可以看看