unity 显示、隐藏Android导航栏
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 摄像头
}
博客园Jason_c微信打赏码
如果本篇文档对你有帮助,打赏Jason_c根华子吧,他的私房钱被老婆没收了,呜呜!
浙公网安备 33010602011771号