在Unity中获取、修改安卓设备系统亮度与Activity亮度
来源:互联网 发布:网络信息收集软件 编辑:程序博客网 时间:2024/05/16 10:42
上一篇在Unity里调整安卓当前Activity亮度发布后,发现了一些其他问题,在这里总结一下在Unity中分别调整和获取安卓系统与Activity的亮度的代码。
(日常无奈习惯Ctrl+S)
获取当前Activity亮度
AndroidJavaObject Activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity"); AndroidJavaObject Window = Activity.Call<AndroidJavaObject>("getWindow"); AndroidJavaObject Attributes = Window.Call<AndroidJavaObject>("getAttributes"); float Brightness = Attributes.Get<float>("screenBrightness");
如果返回值Brightness为-1,那么说明当前是跟随系统亮度的。
设置当前Activity亮度
请参考上一篇博客中的代码。(传送门)
获取系统亮度
AndroidJavaObject Activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");AndroidJavaObject ContentResolver = Activity.Call<AndroidJavaObject>("getContentResolver");AndroidJavaClass SystemSetting = new AndroidJavaClass("android.provider.Settings$System");float Brightness = SystemSetting.CallStatic<int>("getInt",ContentResolver,"screen_brightness") / 256.0f;
此Brightness即为系统亮度,范围0-1,和下拉状态栏里拖动的那个值一样。
设置系统亮度
在Android 6.0之后,需要在AndroidManifest.xml中声明修改系统设置权限,并且还要用户进入某面板手动授权修改权限,较为复杂。
完整解决方案:
一、修改AndroidManifest.xml
将准备好的(复制Unity自带或是已有的)AndroidManifest.xml放在/Assets/Plugins/Android中,加入以下权限:
<manifest ..............> ...... <uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission> ......</manifest>
二、修改系统亮度代码
private AndroidJavaObject Activity, ContentResolver; private AndroidJavaClass SystemSetting; private void Start() { Activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity"); ContentResolver = Activity.Call<AndroidJavaObject>("getContentResolver"); SystemSetting = new AndroidJavaClass("android.provider.Settings$System"); } //在Start函数中获取Activity等对象 public void SetSystemBrightness(int Value) //Value 取值范围 0-255 { //获取当前安卓SDK版本 AndroidJavaClass Build_Version = new AndroidJavaClass("android.os.Build$VERSION"); int SDK_INT = Build_Version.GetStatic<int>("SDK_INT"); //判断是否有修改设置权限 if (!SystemSetting.CallStatic<bool>("canWrite", Activity)) { //如果大于等于23(安卓6.0)呼出授权界面 if (SDK_INT >= 23) { AndroidJavaObject Intent = new AndroidJavaObject("android.content.Intent"); Intent = Intent.Call<AndroidJavaObject>("setAction", "android.settings.action.MANAGE_WRITE_SETTINGS"); Intent = Intent.Call<AndroidJavaObject>("setData", new AndroidJavaObject("android.net.Uri").CallStatic<AndroidJavaObject>("parse", "package:" + Activity.Call<string>("getPackageName"))); Intent = Intent.Call<AndroidJavaObject>("addFlags", 268435456); Activity.Call("startActivity", Intent); } } //修改系统亮度 else SystemSetting.CallStatic<bool>("putInt", ContentResolver, "screen_brightness", Value); }
Value取值范围0-255。
总结
建议使用修改Activity亮度,获取高权限难免会引起用户反感。
况且只修改Activity亮度,应用退出后还会自动复原系统亮度,岂不美哉?
若一开始想获取Activity亮度但得到-1的返回值,意味着和系统亮度同步,请先使用获取系统亮度得到值。
Unity版本 5.6.2f1
如有问题请评论,欢迎转载,请注明出处。
阅读全文
1 0
- 在Unity中获取、修改安卓设备系统亮度与Activity亮度
- 安卓修改系统的屏幕亮度
- 安卓SeekBar调节系统亮度与音量
- iOS 修改系统亮度
- 在Unity中调整安卓当前窗口屏幕亮度的实现(无需导出工程或制作插件)
- 修改应用亮度和系统亮度
- unity 控制安卓手机的亮度调节
- 安卓调节系统的音量和调节系统亮度
- unity 修改亮度,对比度,饱和度的处理
- Android获取并设置Activity的亮度
- Android获取并设置Activity的亮度
- Android获取并设置Activity的亮度
- android 改变app亮度不影响系统亮度(获取系统亮度)
- 亮度
- Android 系统默认亮度值的修改
- 如何修改Android系统的默认亮度
- 安卓屏幕亮度设置相关
- 安卓调节屏幕亮度Seekbar
- 初来乍到,标记一下
- Linux 调节屏幕亮度
- 图表(APAndroidChart)
- java多线程案例
- eclipse、Maven中文乱码
- 在Unity中获取、修改安卓设备系统亮度与Activity亮度
- 虹膜识别源代码下载,分别基于MATLAB、C++、OpenCV
- Python创始人Guido的建议
- leetcode_ Add to List 121. Best Time to Buy and Sell Stock
- 1011. A+B和C (15) Python 2 编译
- Java飞机大战0_2
- 防止表单重复提交
- listener.ora模板;tnsnames.ora模板
- 1 手写实现SpringMVC,第一节:项目基本结构