c# - xamarin 形式 - 如何获得屏幕亮度和串行端口?
问题描述
我想创建一个页面,显示设备的所有硬件,包括亮度和串口。我应该怎么做?
解决方案
如果想获得亮度,使用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)。还有一个 示例项目,您可以看看。
推荐阅读
- javascript - 无法在 typeScript 中调用函数
- ios - I have Run into a weird problem while making a basic tableview with automatic rowheight
- ffmpeg - FFMPEG 比例和 xfade 不能一起工作
- module - 在球拍中查找模块的名称?
- swift - 如何在 swift 5 中获取 MPMediaItem 歌词
- c++11 - 如何将指针向量中的指针移动到该向量中的另一个索引?
- linux - 看似无法解决的“无法在 unix 上连接到 Docker 守护进程”(尝试了 7 种解决方案但都失败了)
- c# - 没有索引器或数组的推送和弹出
- python - Python 线程 Selenium
- php - BLOB 正确插入 DB,但未在 HTML 中显示