我无法在设备上使用API <= 22(使用Android Studio和Unity)中启动torch。为什么?

huangapple go评论118阅读模式
英文:

I can't start torch in device with API <=22(Used Android Studio and Unity) .why?

问题

大家好,我正在尝试在Unity中创建一个使用Torch的Torch应用程序。根据文档,我注意到setTorchMode()仅适用于API>22。对于API<23,我遵循了这里的方法。但是,即使在API<23中,我的应用程序也无法启动手电筒。通过Logcat,我追踪到了CameraService: Permission Denial: can't use the camera的错误信息。

详细错误报告:

  1. 08-18 09:27:22.343 758-835/? I/ActivityManager: Killing
  2. 14121:com.google.android.partnersetup/u0a7 (adj 15): DHA:empty #19
  3. 08-18 09:27:22.343 196-2615/? W/ServiceManager: Permission failure:
  4. android.permission.CAMERA from uid=10242 pid=14010
  5. 08-18 09:27:22.343 196-2615/? E/CameraService: Permission Denial: can't
  6. use the camera pid=14010, uid=10242
  7. 08-18 09:27:22.343 14010-14051/? W/CameraBase: An error occurred while
  8. connecting to camera: 0
  9. 08-18 09:27:22.353 14010-14051/? E/ContentValues: TorchMode:
  10. java.lang.RuntimeException: Fail to connect to camera service
  11. at android.hardware.Camera.<init>(Camera.java:568)
  12. at android.hardware.Camera.open(Camera.java:426)
  13. at
  14. com.mugames.torchlibrary.AndroidTrochClass.TorchMode
  15. (AndroidTrochClass.java:64)
  16. at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
  17. at com.unity3d.player.UnityPlayer.access$300(Unknown Source)
  18. at com.unity3d.player.UnityPlayer$e$1.handleMessage(Unknown Source)
  19. at android.os.Handler.dispatchMessage(Handler.java:98)
  20. at android.os.Looper.loop(Looper.java:145)
  21. at com.unity3d.player.UnityPlayer$e.run(Unknown Source)

这是我的C#(Unity代码):

  1. private void Awake()
  2. {
  3. if (!Permission.HasUserAuthorizedPermission(Permission.Camera))
  4. {
  5. Permission.RequestUserPermission(Permission.Camera);
  6. }
  7. }
  8. void Start()
  9. {
  10. AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
  11. AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
  12. AndroidJavaObject context = activity.Call<AndroidJavaObject>("getApplicationContext");
  13. javaObject = new AndroidJavaObject("com.mugames.torchlibrary.AndroidTrochClass");
  14. javaObject.Call("Init", context);
  15. javaObject.Call("TorchMode", true);
  16. }

这是我用于API<23的Java代码(Java类名为AndroidTrochClass):

  1. try {
  2. if (camera == null && parameters == null) {
  3. camera = Camera.open();
  4. parameters = camera.getParameters();
  5. List<String> modesAvailable = parameters.getSupportedFlashModes();
  6. if (modesAvailable.contains(Camera.Parameters.FLASH_MODE_TORCH)) {
  7. parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
  8. } else if (modesAvailable.contains((Camera.Parameters.FLASH_MODE_ON))) {
  9. parameters.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
  10. } else {
  11. Log.d("Unity", "No Flash Available");
  12. }
  13. camera.setParameters(parameters);
  14. }
  15. if (state) {
  16. camera.startPreview();
  17. } else {
  18. camera.stopPreview();
  19. }
  20. } catch (Exception e) {
  21. Log.e(TAG, "TorchMode: ", e);
  22. e.printStackTrace();
  23. }

注意:我将Java类仅用作插件,因此Java类未继承任何内容,所以我已将当前上下文传递给了Java方法。

英文:

Hi friends I'm trying to make torch application in unity.From documentation I have noticed that setTorchMode() is applicable only if we have API>22. It works fine for API>22.But for below API<23 I have followed this. But even though my application in not staring torch in API<23 . From Logcat I have traced that CameraService: Permission Denial: can&#39;t use the camera

Detail Error Report:

  1. 08-18 09:27:22.343 758-835/? I/ActivityManager: Killing
  2. 14121:com.google.android.partnersetup/u0a7 (adj 15): DHA:empty #19
  3. 08-18 09:27:22.343 196-2615/? W/ServiceManager: Permission failure:
  4. android.permission.CAMERA from uid=10242 pid=14010
  5. 08-18 09:27:22.343 196-2615/? E/CameraService: Permission Denial: can&#39;t
  6. use the camera pid=14010, uid=10242
  7. 08-18 09:27:22.343 14010-14051/? W/CameraBase: An error occurred while
  8. connecting to camera: 0
  9. 08-18 09:27:22.353 14010-14051/? E/ContentValues: TorchMode:
  10. java.lang.RuntimeException: Fail to connect to camera service
  11. `enter code here`at android.hardware.Camera.&lt;init&gt;(Camera.java:568)
  12. at android.hardware.Camera.open(Camera.java:426)
  13. at
  14. com.mugames.torchlibrary.AndroidTrochClass.TorchMode
  15. (AndroidTrochClass.java:64)
  16. at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
  17. at com.unity3d.player.UnityPlayer.access$300(Unknown Source)
  18. at com.unity3d.player.UnityPlayer$e$1.handleMessage(Unknown Source)
  19. at android.os.Handler.dispatchMessage(Handler.java:98)
  20. at android.os.Looper.loop(Looper.java:145)
  21. at com.unity3d.player.UnityPlayer$e.run(Unknown Source)

Here is my C# (Unity Code)

  1. private void Awake()
  2. {
  3. if(!Permission.HasUserAuthorizedPermission(Permission.Camera))
  4. {
  5. Permission.RequestUserPermission(Permission.Camera);
  6. }
  7. }
  8. void Start()
  9. {
  10. AndroidJavaClass unityPlayer = new AndroidJavaClass(&quot;com.unity3d.player.UnityPlayer&quot;);
  11. AndroidJavaObject activity = unityPlayer.GetStatic&lt;AndroidJavaObject&gt;(&quot;currentActivity&quot;);
  12. AndroidJavaObject context = activity.Call&lt;AndroidJavaObject&gt;(&quot;getApplicationContext&quot;);
  13. javaObject = new AndroidJavaObject(&quot;com.mugames.torchlibrary.AndroidTrochClass&quot;);
  14. javaObject.Call(&quot;Init&quot;, context);
  15. javaObject.Call(&quot;TorchMode&quot;, true);
  16. }

Also Here is my Java code(Name of JAVA class is AndroidTrochClass) for API<23

  1. try {
  2. if(camera== null &amp;&amp; parameters==null) {
  3. camera = Camera.open();
  4. parameters = camera.getParameters();
  5. List&lt;String&gt; modesAvailable = parameters.getSupportedFlashModes();
  6. if (modesAvailable.contains(Camera.Parameters.FLASH_MODE_TORCH)) {
  7. parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
  8. } else if (modesAvailable.contains((Camera.Parameters.FLASH_MODE_ON))) {
  9. parameters.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
  10. } else {
  11. Log.d(&quot;Unity&quot;, &quot;No Flash Available&quot;);
  12. }
  13. camera.setParameters(parameters);
  14. }
  15. if (state) {
  16. camera.startPreview();
  17. } else {
  18. camera.stopPreview();
  19. }
  20. }
  21. catch (Exception e)
  22. {
  23. Log.e(TAG, &quot;TorchMode: &quot;,e);
  24. e.printStackTrace();
  25. }

NOTE: I'm using Java Class Just as Plugin So Java Class extend to nothing so I have passed current context to Java Methods

答案1

得分: 0

找到了!我需要在清单文件中添加相机权限 我无法在设备上使用API <= 22(使用Android Studio和Unity)中启动torch。为什么?

英文:

Found!! I need to add Camera permission in manifest file 我无法在设备上使用API <= 22(使用Android Studio和Unity)中启动torch。为什么?

huangapple
  • 本文由 发表于 2020年8月17日 19:34:50
  • 转载请务必保留本文链接:https://go.coder-hub.com/63450000.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定