1、下面的返回、home栏可用Screen.fullScreen控制
2、导航栏的显示和隐藏用下面代码控制
private AndroidJavaObject currentActivity { get { return new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity"); } } /// <summary> /// 隐藏上方状态栏 /// </summary> public void HideStatusBar() { #if UNITY_ANDROID currentActivity.Call("runOnUiThread", new AndroidJavaRunnable(() => { currentActivity.Call<AndroidJavaObject>("getWindow").Call("clearFlags", 2048); })); #endif Debug.Log("hide status bar"); } /// <summary> /// 显示上方状态栏 /// </summary> public void ShowStatusBar() { #if UNITY_ANDROID currentActivity.Call("runOnUiThread", new AndroidJavaRunnable(() => { currentActivity.Call<AndroidJavaObject>("getWindow").Call("addFlags", 2048);// WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN })); #endif Debug.Log("show status bar"); }
3、
using System.Collections; using System.Collections.Generic; using UnityEngine; public class AndroidInterface { private static AndroidInterface instance; public static AndroidInterface Instance { get { if (instance==null) { instance = new AndroidInterface(); } return instance; } } private AndroidInterface() { } private AndroidJavaObject currentActivity { get { return new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity"); } } #region /// <summary> /// 设置全面屏 /// </summary> /// <param name="isSetNotchScreen"></param> public void SafeArea(bool isSetNotchScreen) { currentActivity.Call("runOnUiThread", new AndroidJavaRunnable(() => { AndroidJavaObject currentWindow = currentActivity.Call<AndroidJavaObject>("getWindow");//返回Window AndroidJavaObject lp = currentWindow.Call<AndroidJavaObject>("getAttributes");//返回WindowManager.LayoutParams if (isSetNotchScreen) { //int WindowManager_LayoutParams_FLAG_LAYOUT_IN_OVERSCAN = 33554432;//允许窗口内容扩展到屏幕的过扫描区域(如果有)。窗口仍应正确定位其内容以考虑过扫描区域。 int WindowManager_LayoutParams_FLAG_TRANSLUCENT_STATUS = 67108864;//有透明的状态栏和导航栏,且屏幕延伸至状态栏内部 lp.Set("flags", WindowManager_LayoutParams_FLAG_TRANSLUCENT_STATUS); } else { int WindowManager_LayoutParams_FLAG_LAYOUT_IN_SCREEN = 256; lp.Set("flags", WindowManager_LayoutParams_FLAG_LAYOUT_IN_SCREEN); } currentWindow.Call("setAttributes", lp); })); } #endregion #region 标题栏 /// <summary> /// 隐藏上方状态栏 /// </summary> public void HideStatusBar() { #if UNITY_ANDROID&&!UNITY_EDITOR //currentActivity.Call("runOnUiThread", new AndroidJavaRunnable(() => //{ //currentActivity.Call<AndroidJavaObject>("getWindow").Call("clearFlags", 2048); //})); Screen.fullScreen = true; #endif Debug.Log("hide status bar"); } /// <summary> /// 显示上方状态栏 /// </summary> public void ShowStatusBar() { #if UNITY_ANDROID&&!UNITY_EDITOR //currentActivity.Call("runOnUiThread", new AndroidJavaRunnable(() => //{ // currentActivity.Call<AndroidJavaObject>("getWindow").Call("addFlags", 2048);// WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN //})); Screen.fullScreen = false; #endif Debug.Log("show status bar"); } #endregion 标题栏 #region 摄像头 AndroidJavaObject androidCamera; AndroidJavaObject CrazyFocusPocus() { // Get activity instance (standard way, solid) var pl_class = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); var currentActivity = pl_class.GetStatic<AndroidJavaObject>("currentActivity"); // Get instance of UnityPlayer (hacky but will live) var pl_inst = currentActivity.Get<AndroidJavaObject>("mUnityPlayer"); // Get list of camera wrappers in UnityPlayer (very hacky, will die if D becomes C tomorrow) //var list = pl_inst.Get<AndroidJavaObject>("D"); var list = pl_inst.Get<AndroidJavaObject>("m"); Debug.Log("--------" + list); int x = list.Call<int>("size"); Debug.Log("--------"+x); if (x == 0) return null; // Get the first element of list (active camera wrapper) var cam_holder = list.Call<AndroidJavaObject>("get", 0); // get camera (this is totally insane, again if "a" becomes not-"a" one day ) var cam = cam_holder.Get<AndroidJavaObject>("a"); //// Call my setup camera routine in Android plugin (will set params and call autoFocus) //var jc = new AndroidJavaClass("org.example.ScriptBridge.JavaClass"); //jc.CallStatic("enableAutofocus", new[] { cam }); return cam; } public void FlashCtrl(bool isOpenFlashOfthisCamera) { ////AndroidJavaObject cameraManager = new AndroidJavaClass("android.hardware.camera2.CameraManager"); //AndroidJavaObject Camera2Wrapper_androidClass = currentActivity.Get<AndroidJavaObject>("mUnityPlayer").Get<AndroidJavaObject>("p"); //AndroidJavaObject a_androidClass = Camera2Wrapper_androidClass.Get<AndroidJavaObject>("b"); //AndroidJavaObject CameraManager_androidClass = a_androidClass.GetStatic<AndroidJavaObject>("b"); //string[] cameraName= a_androidClass.GetStatic<string[]>("c"); //Debug.Log(CameraManager_androidClass); //Debug.Log(cameraName); //CameraManager_androidClass.Call("setTorchMode", cameraName[0], isOpenFlashOfthisCamera); AndroidJavaClass cameraManager = new AndroidJavaClass("android.os.IHardwareService"); cameraManager.Call("setFlashlightEnabled", isOpenFlashOfthisCamera); } /// <summary> /// 打开摄像头 /// </summary> public void StartCamera(int cameraID,WebCamTexture webCamTexture) { if (androidCamera==null) { //androidCamera = new AndroidJavaClass("android.hardware.Camera").CallStatic<AndroidJavaObject>("open", cameraID); androidCamera = CrazyFocusPocus(); } AndroidJavaObject surfaceTexture = new AndroidJavaClass("android.graphics.SurfaceTexture"); AndroidJavaObject setPreviewTexture= androidCamera.Call<AndroidJavaObject>("setPreviewTexture", surfaceTexture); Debug.Log("摄像头预览"); } public void StartFlash() { try { //AndroidJavaObject androidCamera = new AndroidJavaClass("android.hardware.Camera").CallStatic<AndroidJavaObject>("open"); if (androidCamera == null) { //androidCamera = CrazyFocusPocus(); androidCamera = new AndroidJavaClass("android.hardware.Camera").CallStatic<AndroidJavaObject>("open"); } AndroidJavaObject cameraParameter = androidCamera.Call<AndroidJavaObject>("getParameters"); cameraParameter.Call("setFlashMode", new AndroidJavaObject("java.lang.String", "torch")); androidCamera.Call("setParameters", cameraParameter); androidCamera.Call("startPreview "); // androidCamera.Call("release");//释放掉,不释放其他程序无法调用摄像头 } catch (AndroidJavaException e) { Debug.LogError(e.StackTrace); } Debug.Log("打开闪光灯"); } public void StopFlash() { try { AndroidJavaObject androidCamera = new AndroidJavaClass("android.hardware.Camera").CallStatic<AndroidJavaObject>("open"); AndroidJavaObject cameraParameter = androidCamera.Call<AndroidJavaObject>("getParameters"); cameraParameter.Call("setFlashMode", new AndroidJavaObject("java.lang.String", "off")); androidCamera.Call("setParameters", cameraParameter); androidCamera.Call("release");//释放掉,不释放其他程序无法调用摄像头 } catch (AndroidJavaException e) { Debug.LogError(e.StackTrace); } Debug.Log("关闭闪光灯"); } #endregion 摄像头 }