java - 我无法在 API <=22(使用 Android Studio 和 Unity)的设备中启动 Torch。为什么?
问题描述
嗨朋友们,我正在尝试统一制作 Torch 应用程序。从文档中我注意到 setTorchMode() 仅在我们的 API>22 时才适用。它适用于 API>22。但对于低于 API<23,我遵循了这个。但即使我的应用程序没有在 API<23 中盯着火炬。从 Logcat 我已经追踪到CameraService: Permission Denial: can't use the camera
详细错误报告:
08-18 09:27:22.343 758-835/? I/ActivityManager: Killing
14121:com.google.android.partnersetup/u0a7 (adj 15): DHA:empty #19
08-18 09:27:22.343 196-2615/? W/ServiceManager: Permission failure:
android.permission.CAMERA from uid=10242 pid=14010
08-18 09:27:22.343 196-2615/? E/CameraService: Permission Denial: can't
use the camera pid=14010, uid=10242
08-18 09:27:22.343 14010-14051/? W/CameraBase: An error occurred while
connecting to camera: 0
08-18 09:27:22.353 14010-14051/? E/ContentValues: TorchMode:
java.lang.RuntimeException: Fail to connect to camera service
`enter code here`at android.hardware.Camera.<init>(Camera.java:568)
at android.hardware.Camera.open(Camera.java:426)
at
com.mugames.torchlibrary.AndroidTrochClass.TorchMode
(AndroidTrochClass.java:64)
at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
at com.unity3d.player.UnityPlayer.access$300(Unknown Source)
at com.unity3d.player.UnityPlayer$e$1.handleMessage(Unknown Source)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:145)
at com.unity3d.player.UnityPlayer$e.run(Unknown Source)
这是我的 C#(统一代码)
private void Awake()
{
if(!Permission.HasUserAuthorizedPermission(Permission.Camera))
{
Permission.RequestUserPermission(Permission.Camera);
}
}
void Start()
{
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject context = activity.Call<AndroidJavaObject>("getApplicationContext");
javaObject = new AndroidJavaObject("com.mugames.torchlibrary.AndroidTrochClass");
javaObject.Call("Init", context);
javaObject.Call("TorchMode", true);
}
这也是我的 API<23 的 Java 代码(JAVA 类的名称是 AndroidTrochClass)
try {
if(camera== null && parameters==null) {
camera = Camera.open();
parameters = camera.getParameters();
List<String> modesAvailable = parameters.getSupportedFlashModes();
if (modesAvailable.contains(Camera.Parameters.FLASH_MODE_TORCH)) {
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
} else if (modesAvailable.contains((Camera.Parameters.FLASH_MODE_ON))) {
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
} else {
Log.d("Unity", "No Flash Available");
}
camera.setParameters(parameters);
}
if (state) {
camera.startPreview();
} else {
camera.stopPreview();
}
}
catch (Exception e)
{
Log.e(TAG, "TorchMode: ",e);
e.printStackTrace();
}
注意:我使用 Java 类就像插件一样,所以 Java 类扩展为空,所以我已将当前上下文传递给 Java 方法
解决方案
成立!!我需要在清单文件中添加相机权限;)
推荐阅读
- javascript - 允许使用 Array.from 将数据结构转换为数组
- r - 在循环中,我无法将数值附加到最初为空的向量。我可以通过控制台做到这一点
- python - 如何在三个字段上使用 partitionby 配对字段中的所有值
- rabbitmq - RabbiMQ stomp 自动删除队列 - 前提条件失败
- java - 在元素描述中使用变量值
- php - 这个 foreach 适合向数据库添加文本还是我使用了错误的方法?
- sql - 获取 MariaDB 的正确 SQL 查询语法
- haxe - 双击我的 hxml 文件时如何恢复“编译”?
- android - 当我点击按钮时如何在android中配置按钮它会改变它的颜色&点击后它会变成默认(以前的)颜色
- c - 如何使用 Win32 API 从现有对话框中创建带有列表框中文本的对话框?