我正试图在小部件中使用相机LED手电筒.我已经找到了关于这个主题的几个主题(即后面提到的那个 ......),现在我正试图控制灯光使用:
Camera cam = Camera.open();
Parameters p = cam.getParameters();
p.setFlashMode(Parameters.FLASH_MODE_TORCH);
cam.setParameters(p);
cam.release();
Run Code Online (Sandbox Code Playgroud)
在AndroidManifest.xml中尝试了不同的权限,目前我有:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera.flash" />
Run Code Online (Sandbox Code Playgroud)
我正在Galaxy Tab上测试这个,因为我手头没有任何其他Android设备:灯没亮.所以我现在有几个问题:
感谢您的任何见解!
顺便说一句,我很快就通过快速设置进行了测试,这里提到了几次.手电筒也不能用于快速设置.
请注意,Galaxy Tab stil使用android 2.2.我看到2.2和2.3之间有一些变化.
评论:我知道它必须以某种方式工作,因为我发现市场上的其他应用程序与Galaxy Tab完美配合.
评论2:如果我设置了cam.setParameters(p); 并使用getFlashMode()直接向相机询问当前状态,它正确返回FLASH_MODE_TORCH.但是,如果我释放相机并重新打开它,它将返回FLASH_MODE_OFF.这几乎就像Camera对象知道了请求,但并没有真正将它传递给硬件!?
-
康斯坦丁评论后,我删除了cam.release(); 部分.他是对的,如果你松开相机,设置就不会持续存在.如果再次使用cam.open(),您将获得一个关闭灯的新实例.尽管如此,光还没有在星系标签上工作.所以,如果你试图通过一个小部件来控制它,我想很难保持亮点.一旦后台服务完成,相机对象就会自动释放,因此灯会再次关闭.我的问题仍然存在,特别是为什么相机不能在一开始就打开.
当我在模拟器中运行我的Android应用程序时,我无法连接到相机服务异常.我已经阅读了各种现有的帖子,但没有人修复过这个问题.很明显,Camera.open()调用失败了.我最终想让网络摄像头进入模拟器,正如许多SO帖子所讨论的那样,但现在只是希望应用程序在没有轰炸的情况下运行.我不关心是否有任何摄像机视频显示,因为除了我需要测试的相机之外还有其他功能,并且主要测试我的设备上的摄像头.
我的清单似乎没问题.其中包含以下几行:
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
Run Code Online (Sandbox Code Playgroud)
在我的AVD管理器中,我将前后摄像头设置为"仿真",SD卡值设置为64.这些似乎是推荐值.完整的堆栈跟踪现在在下面.解决方案必须是直截了当的,但是什么?
10-09 08:14:32.375 2628-2628/com.allinlearning.AILAndroidScanner E/AndroidRuntime? FATAL EXCEPTION: main
Process: com.allinlearning.AILAndroidScanner, PID: 2628
java.lang.RuntimeException: Fail to connect to camera service
at android.hardware.Camera.native_setup(Native Method)
at android.hardware.Camera.<init>(Camera.java:350)
at android.hardware.Camera.open(Camera.java:309)
at com.allinlearning.AILAndroidScanner.AsynCamPreview.surfaceCreated(AsynCamPreview.java:104)
at android.view.SurfaceView.updateWindow(SurfaceView.java:572)
at android.view.SurfaceView.access$000(SurfaceView.java:86)
at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:175)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:847)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1871)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:544)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method) …Run Code Online (Sandbox Code Playgroud) 我正在使用Camera 2 API开发一个手电筒应用程序.一切都很好.
在开发应用程序时,我遇到了很多教程甚至是堆栈溢出的帖子,其中人们使用了"android.permission.FLASHLIGHT"权限.
我试图在官方文档中搜索"android.permission.FLASHLIGHT"(在developer.android.com中),但找不到任何内容.
我只知道什么是许可,是否需要打开火炬模式.如果是,为什么没有官方文档,为什么我的应用程序(目标API> = 21)在没有此权限的情况下工作?
注意:我在Android 5,6,7,8中测试了我的应用程序,它运行正常,除了诺基亚6和小米redimi note.
我想在我的应用程序中提供我需要权限的功能INTERNET.
但是,并非所有用户都希望使用此功能,因为这是一个非常强大的权限,我不想强迫每个人在他们想要使用它时将其提供给应用程序,只有当他们想要使用此功能时.
所以我必须在运行时请求该许可.sdk应用程序的最小值为15,我不想将其设置得更高.
requestPermissions(String[],int)我可以在我的调用中使用的方法Activity仅适用于API 23,但我可以调用ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.INTERNET},0);,但它不会显示对话框.
是的,我已检查是否已授予权限:
if(ContextCompat.checkSelfPermission(this,Manifest.permission.INTERNET)!=
PackageManager.PERMISSION_GRANTED)
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.INTERNET},0);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?