using System;
using System.Collections;
using System.Runtime.InteropServices;
using UnityEngine;
using LuaInterface;
public class ChangeCubeColor : MonoBehaviour
{
private static int BRIGHTNESS_SCALE = 255;
#if (UNITY_IOS || UNITY_TVOS) && !UNITY_EDITOR
[DllImport("__Internal")]
private static extern float GetBrightnessNative();
[DllImport("__Internal")]
private static extern void SetBrightnessNative(float value);
#endif
public float moveSpeed = 10f;
private static float activityBrightness = -1; // 当前app中屏幕亮度(仅Android)
private static float systemBrightness = -1; // 系统屏幕亮度
private static int targetBrightness = 10;
private static string debugLog;
#if UNITY_ANDROID
# region 获取当前系统屏幕亮度(0 - 255)
static int TryGetBrightness()
{
// 获取当前activity屏幕亮度(0 - 1)
//AndroidJavaObject Activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
//AndroidJavaObject Window = Activity.Call<AndroidJavaObject>("getWindow");
//AndroidJavaObject Attributes = Window.Call<AndroidJavaObject>("getAttributes");
//activityBrightness = Attributes.Get<float>("screenBrightness");
// 获取当前系统屏幕亮度(0 - 255)
AndroidJavaObject uActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject uContentResolver = uActivity.Call<AndroidJavaObject>("getContentResolver");
AndroidJavaClass uSystemSetting = new AndroidJavaClass("android.provider.Settings$System");
return uSystemSetting.CallStatic<int>("getInt", uContentResolver, "screen_brightness");
}
#endregion
#region 调整当前activity屏幕亮度(0 - 1)
static void TrySetActivityBrightness(int brightness)
{
float targetBrightness = brightness / 255.0f;
AndroidJavaObject uActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
// 在这个里边不能做计算
uActivity.Call("runOnUiThread", new AndroidJavaRunnable(() =>
{
AndroidJavaObject uWindow = uActivity.Call<AndroidJavaObject>("getWindow");
AndroidJavaObject uAttributes = uWindow.Call<AndroidJavaObject>("getAttributes");
uAttributes.Set("screenBrightness", targetBrightness);
uWindow.Call("setAttributes", uAttributes);
}));
}
#endregion
#region 调整当前系统屏幕亮度(0 - 255), 需要申请用户权限
static void TrySetSystemBrightness(int brightness)
{
AndroidJavaObject uActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject ContentResolver = uActivity.Call<AndroidJavaObject>("getContentResolver");
AndroidJavaClass SystemSetting = new AndroidJavaClass("android.provider.Settings$System");
AndroidJavaClass Build_Version = new AndroidJavaClass("android.os.Build$VERSION");
int SDK_INT = Build_Version.GetStatic<int>("SDK_INT");
//判断是否有修改设置权限
if (!SystemSetting.CallStatic<bool>("canWrite", uActivity))
{
//如果大于等于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:" + uActivity.Call<string>("getPackageName")));
//Intent = Intent.Call<AndroidJavaObject>("addFlags", 268435456);
uActivity.Call("startActivity", Intent);
}
}
//修改系统亮度
else
{
SystemSetting.CallStatic<bool>("putInt", ContentResolver, "screen_brightness", brightness);
// 修改完需要将activity的亮度设为-1,就是跟随系统
uActivity.Call("runOnUiThread", new AndroidJavaRunnable(() =>
{
var Window = uActivity.Call<AndroidJavaObject>("getWindow");
var Attributes = Window.Call<AndroidJavaObject>("getAttributes");
Attributes.Set("screenBrightness", -1);
Window.Call("setAttributes", Attributes);
}));
}
}
#endregion
#endif
static int GetBrightness()
{
#if UNITY_EDITOR
return -1;
#elif UNITY_IOS || UNITY_TVOS
return (int)(GetBrightnessNative() * BRIGHTNESS_SCALE);
#elif UNITY_ANDROID
int brightness = -1;
brightness = TryGetBrightness();
return brightness;
#endif
return 0;
}
static void SetBrightness(int brightness)
{
#if UNITY_EDITOR
return;
#elif UNITY_IOS || UNITY_TVOS
SetBrightnessNative(1.0f * brightness / BRIGHTNESS_SCALE);
#elif UNITY_ANDROID
TrySetActivityBrightness(brightness);
#endif
}
void Start()
{
// 获取当前系统屏幕亮度
systemBrightness = GetBrightness();
}
void OnGUI()
{
GUI.Label(new Rect(100, Screen.height / 2 - 100, 600, 400), "position.x: " + transform.position.x.ToString());
GUI.Label(new Rect(100, Screen.height / 2 - 200, 600, 400), "width: " + Screen.currentResolution.width.ToString());
GUI.Label(new Rect(100, Screen.height / 2, 600, 400), "DebugLog: " + debugLog);
GUI.Label(new Rect(100, Screen.height / 2 + 200, 600, 400), "activityBrightness: " + activityBrightness);
GUI.Label(new Rect(100, Screen.height / 2 + 300, 600, 400), "systemBrightness: " + systemBrightness);
}
private void OnMouseDown()
{
SetBrightness(targetBrightness);
targetBrightness += 10;
GetBrightness();
GetComponent<Renderer>().material.color = Color.red;
transform.Translate(Vector3.left * 2f * Time.deltaTime);
}
// Update is called once per frame
void Update()
{
}
}
Unity app 中调整 Android 手机屏幕亮度
最新推荐文章于 2022-01-18 11:46:30 发布