Articles of android camera

自定义byteArray数据到WebRTC videoTrack

我需要使用WebRTC for android将特定的裁剪(面部)video发送到videoChannel。 我能够操作CameraRession类的WebRTC来裁剪面部。 现在我将它设置为ImageView。 listenForBytebufferFrames() private void listenForBytebufferFrames() { this.camera.setPreviewCallbackWithBuffer(new PreviewCallback() { public void onPreviewFrame(byte[] data, Camera callbackCamera) { Camera1Session.this.checkIsOnCameraThread(); if(callbackCamera != Camera1Session.this.camera) { Logging.e(“Camera1Session”, “Callback from a different camera. This should never happen.”); } else if(Camera1Session.this.state != Camera1Session.SessionState.RUNNING) { Logging.d(“Camera1Session”, “Bytebuffer frame captured but camera is no longer running.”); } else { mFrameProcessor.setNextFrame(data, […]

设备管理员弃用是否意味着我们将无法再禁用相机?

因为Android 设备管理将被弃用 。 它将被Android Enterprise Mobility Manager(EMM)取代,并且如function列表中所示,工作配置文件中不支持禁用摄像头。 工作受管设备需要恢复出厂设置才能进行设置。 那么我们将无法再为BYOD禁用摄像头吗? 或者有没有其他方法可以禁用所有配置文件/整个设备,如三星KNOX吗?

takePicture因堆相关错误而失败

第一件事:在2个不同的HTC Desires上发生以下错误,一个是2.3.3,另一个是4.0.4。 尝试调用时,我收到以下错误消息.takePicture: E/MemoryHeapBase(104): error opening /dev/pmem_camera: No such file or directory E/QualcommCameraHardware(104): failed to construct master heap for pmem pool /dev/pmem_camera E/QualcommCameraHardware(104): initSnapshot X failed with pmem_camera, trying with pmem_adsp 在此错误之后永远不会调用相应的PictureCallback。 我能find的唯一解释是a)没有调用startPreview; b)尝试拍摄太快(在调用图片回调之前); c)未设置正确的使用/权限 我在这里,在我的FullscreenActivity的onResume()中: //open the camera resource cam = Camera.open(); Camera.Parameters params = cam.getParameters(); //change Parameters params.setJpegQuality(100);//best quality params.setFlashMode(Parameters.FLASH_MODE_TORCH); //params.setZoom(2); List supportedPreviewSizes […]

Android相机 – 录制video时预览会放大

我一直试图解决这个问题,但出于某种原因,当我开始使用相机录制video时,预览会放大。我从以下示例中获得以下代码: @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Camera.Parameters myParameters = mCamera.getParameters(); List sizes = myParameters.getSupportedPreviewSizes(); Camera.Size myBestSize = getBestPreviewSize(sizes, width, height); if (myBestSize != null) { myParameters.setPreviewSize(myBestSize.width, myBestSize.height); myParameters.setVideoStabilization(false); mCamera.setParameters(myParameters); mCamera.startPreview(); mCamera.unlock(); } } private Camera.Size getBestPreviewSize(List sizes, int width, int height) { final double ASPECT_TOLERANCE = 0.05; double […]

强行关闭后Android相机锁定

我有一个应用程序,我使用设备相机。 现在我只在正常流量下释放相机。 @Override public void surfaceDestroyed(SurfaceHolder surfaceHolder) { if(camera != null) { camera.stopPreview(); camera.release(); } } 因此,应用程序以意外的方式退出相机模式 – 即强制关闭(由于OutOfMemoryError ) – 相机被锁定。 释放它的唯一方法是重启设备。 在应用程序启动后,我得到: RuntimeException: Fail to connect to camera service 我怎么能确定,相机在任何情况下都会被释放?

Android – 录制video时在前后摄像头之间切换

我正在尝试实现自定义相机来录制video。 我已经关注了这个样本 ,它运行正常。 现在,我想通过按钮点击添加“切换摄像头”function。 即使在录制video时,它也应该能够在前/后摄像头之间切换 。 因此,请帮助我知道它是否可能? 1.如果是,那么如何? 如果没有那么请建议一些解决方法? 一些示例代码或链接将非常有用…… 注意:我一直在谷歌上搜索,发现一些StackOverFlow的答案就像 Android Camera2 API切换后置摄像头 Android:单击按钮时切换相机 但是, 当录制video时 ,这些都没有提供切换摄像机的function 。 请帮忙。 代码与此示例相同。 这是Camera2 API 。

有没有一种程序化的方法来检测相机是否有光学变焦?

似乎有一些Android设备有光学变焦,例如 三星S4 Zoom(OS 4.2) Altek A14和A16(OS 2.3.5) 有没有办法以编程方式检测这个? 由于相机通常需要几秒钟来初始化,在我的应用程序中有一些流程,我启动相机预期用户即将使用它(所以当他们实际按下我的应用内相机按钮时应用感觉更快) 。 如果相机具有光学变焦,那么我不想这样做,因为镜头滑出并使用户烦恼。 如果我必须将这些设备列入黑名单,是否有人知道所有带有光学变焦的Android设备的列表,最好是使用他们的Build.MANUFACTURER和Build.PRODUCT字符串? 如果它有帮助,这里是我最近购买的S4 Zoom的Camera.Parameters: {preferred-preview-size-for-video=704×528, factory-af-led-lv-limit=-1,-1, zoom=0, factory-af-scan-limit=-1,-1, max-num-detected-faces-hw=0, continuous-mode=off, zoom-supported=true, metering=center, whitebalance=auto, scene-mode=auto, jpeg-quality=1, factory-testno=0, factory-af-diff-check=-1,-1, preview-format-values=yuv420sp,yuv420p, best-mode=off, red-eye-fix=fail, jpeg-thumbnail-quality=100, preview-format=yuv420sp, low-light-mode=off, zoom-action=zoom-stop, face-detection=off, video-size-values=1920×1080,1280×720,800×450,768×512,640×480,320×240,176×144, factory-zoom-slope-check-data=-1,-1, preview-size=960×540, focal-length=4.300000, flash-charging=0, factory-cap-range=-1,-1, factory-iris-range=-1,-1, flash-mode-values=off,auto,red-eye,on,fillin,slow,red-eye-fix, preview-frame-rate-values=30,15, factory-af-scan-range=-1,-1, max-num-metering-areas=0, preview-frame-rate=30, focus-mode-values=auto,infinity,macro,fixed,face-detection,continuous,continuous-picture,continuous-video,manual,multi,touch,object-tracking, jpeg-thumbnail-width=224, video-size=0x0, scene-mode-values=auto,portrait,landscape,night,beach,snow,sunset,fireworks,sports,party,candlelight,dusk-dawn,fall-color,back-light,text, preview-fps-range-values=(7000,30000), jpeg-thumbnail-size-values=224×126,160×120,192×128,0x0, zoom-ratios=100,120,140,160,180,220,310,420,560,790,1000, preview-size-values=960×540,768×512,704×576,704×528,640×524,640×480,320×240, […]

超出最小未加标缓冲区计数

我使用SurfaceTexture以下列方式获取预览帧。 首先,我设置了一个预览纹理: camera.setPreviewTexture(new SurfaceTexture(0)); 然后,在开始预览之前,然后每次调用onPreviewFrame ,我都设置回调缓冲区,如下所示: camera.addCallbackBuffer(buffer); camera.setPreviewCallbackWithBuffer(this); 有用。 有时,我使用camera.takePicture(null, null, callback) onPictureTaken ,这会导致成功调用onPictureTaken 。 图像已保存。 由于我想在拍摄照片后重新开始预览,我会执行以下操作: try { camera.setPreviewTexture(new SurfaceTexture(0)); camera.startPreview(); } … 预览重新开始,一切似乎都很好。 但是在我的Logcat中报告了以下错误,似乎在重新启动预览之后: E/BufferQueue﹕ [unnamed-5682-5] dequeueBuffer: min undequeued buffer count (2) exceeded (dequeued=5 undequeudCount=1) 我错过了什么吗? 我应该在某个时候释放旧纹理吗? 配置:三星Galaxy S4,三星Galaxy S5,Nexus 5,在Android KitKat上运行。 编辑:我不确定它是否链接,但过了一段时间,我的应用程序不再拍照,以下消息在我的Logcat中不断出现: E/LocSvc_api_v02( 318): I/—> locClientSendReq line 2332 QMI_LOC_INJECT_SENSOR_DATA_REQ_V02 E/gsiff_dmn( 318): I/loc_api_resp_ind_callback: […]

使用密码锁定设备时捕获图像

我想实现一种function,当有人试图解锁我的设备并输入错误的密码3次时,通过前置摄像头捕获图像。 我检查过它可以在Android中使用,某些应用程序也可以在Market中使用。 我已经做了一些工作来实现这一点,但我得到了一个黑色的图像。 这是代码: 注册设备管理员以获取广播的错误密码尝试: public class DeviceAdminSample extends DeviceAdminReceiver { static Context ctx; static SharedPreferences getSamplePreferences(Context context) { ctx = context; return context.getSharedPreferences( DeviceAdminReceiver.class.getName(), 0); } @Override public void onPasswordFailed(Context context, Intent intent) { super.onPasswordFailed(context, intent); System.out.println(“Password Attempt is Failed…”); Intent i = new Intent(context, CameraView.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } } Camera Class捕获图像并将其保存到SD卡: public class […]

如何获得图库应用可见的每个新图像的通知?

背景 当用户下载新图像或使用相机捕获图像时,图库应用程序将更新以显示新图像。 我需要在每个新图像创建后立即得到通知,无论它是如何创建的(相机,浏览器……),就像图库应用程序显示的那样。 问题 事实certificate,有一个mediaScanner Android组件负责扫描所有types的媒体文件,当它完成时,它应该发送一个意图“ MEDIA_SCANNER_FINISHED ”(如本例所示)。 所以我添加了下一个代码,希望每次用户从相机应用程序拍摄照片时都会显示吐司: 表现: … … java文件: package com.example.newgalleryimagereceivertest; … public class MediaScannerBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, final Intent intent) { android.util.Log.d(“AppLog”, “gallery has new images”); } 出于某种原因,此代码不起作用…… 这个问题 代码有什么问题? 拍摄照片后是否会调用broadcastReceiver? 这样做的正确方法是什么? 我是否真的需要使用contentObserver并监视其更改(使用类似的东西),并保持应用程序正常运行? 我真的希望不是……