标签: android-camera

广播接收器不会收到相机事件

我正在尝试创建一个可以检测用户何时拍照的应用.我设置了一个广播接收器类,并通过以下方式将其注册在清单文件中:

<receiver android:name="photoReceiver" >
  <intent-filter>
    <action android:name="com.android.camera.NEW_PICTURE"/>
      <data android:mimeType="image/*"/>
 </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

无论我尝试做什么,该程序都不会收到广播.这是我的接收器类:

public class photoReceiver extends BroadcastReceiver {
  private static final String TAG = "photoReceiver";

@Override
public void onReceive(Context context, Intent intent) {
    CharSequence text = "caught it";
    int duration = Toast.LENGTH_LONG;
    Log.d(TAG, "Received new photo");

    Toast toast = Toast.makeText(context, text, duration);
    toast.show();
 }
}
Run Code Online (Sandbox Code Playgroud)

如果我删除清单和我的活动中的mimeType行,我会发送自己的广播

Intent intent = new Intent("com.android.camera.NEW_PICTURE");
sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)

然后我成功收到广播,可以看到日志和吐司窗口​​.我是以正确的方式接近这个吗?我需要添加什么东西吗?

android android-manifest android-camera android-camera-intent

20
推荐指数
4
解决办法
2万
查看次数

我的Android相机Uri返回一个空值,但三星修复已经到位,有帮助吗?

所以我知道相机在三星设备上的问题.您需要在调用相机意图之前创建一个Uri,如下所示:

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, m_username);
mImageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
Run Code Online (Sandbox Code Playgroud)

此示例为相机创建一个Uri来存储数据.我的应用程序在两个位置具有相机功能.两者都是相同的(直接复制粘贴),但在一个活动中,mImageUri对象在相机处理期间变为空,而在另一个活动中它不会.后者工作正常,但前者给出一个空值,这反过来阻止我保存图像,预览它等.我将提供下面的onResult代码:

case CAMERA_PIC_REQUEST :
if(resultCode == RESULT_OK) {
    if(intent != null) {
        //For non-Samsung devices
        Log.e("Intent value:", intent.toString());
        mImageUri = intent.getData();
    }

    mAvatar = BitmapStatic.createImage(mImageUri, this);
    Drawable draw = new BitmapDrawable(getResources(), mAvatar);
    m_photoButtonE.setImageDrawable(draw);
    m_imageChanged = true;
}
break;
Run Code Online (Sandbox Code Playgroud)

以上示例来自工作活动.以下是不起作用的活动:

//On pressing the "Take Photo" button:
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, mUsername); …
Run Code Online (Sandbox Code Playgroud)

camera android android-camera

20
推荐指数
1
解决办法
2万
查看次数

相机:setDisplayOrientation功能不适用于Android 2.3.6的三星Galaxy ACE

我试图创建一个简单的相机应用程序进行研究.我阅读Android Camera Official Document然后开始编码.所以我做了一些步骤让它发挥作用

1.在应用中添加了相机功能所需的权限.

2.我的活动仅限于PORTRAIT模式.

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

3.增加了几个相机回调以使我的相机工作.

  • SurfaceHolder.Callback,
  • Camera.PreviewCallback
  • AutoFocusCallback
  • ShutterCallback
  • PictureCallback用于RAW图像数据
  • PictureCallback用于JPG图像数据

4.In surfaceChanged方法,我自定义相机设置.到目前为止,我已经为几乎所有Android设备工作了

  • LG
  • 香料
  • 三星
  • HTC
  • 福邦
  • 索尼
  • 摩托罗拉
  • 谷歌Nexus系列.

随后我在Android版2.3.6的三星Galaxy ACE上进行了测试,发现Camera Display Preview已转为横向模式.

因此,在记录了log-cat/break点后,我发现下面的方法对于这个特定的模型不起作用

//This method is not working for Samsung Galaxy ACE
 camera.setDisplayOrientation(90); 
//or 
parameters.set("orientation", "portrait");
//or
parameters.setRotation(90);
Run Code Online (Sandbox Code Playgroud)

注意: 我在Google和SO上搜索了大量解决方案,但到目前为止还没有任何运气

供您参考我的示例代码如下

@Override
    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
        Log.v(TAG, "surfaceChanged get called"); …
Run Code Online (Sandbox Code Playgroud)

camera android portrait android-camera samsung-mobile

20
推荐指数
1
解决办法
2万
查看次数

Flutter : PlatformException(no_available_camera, 没有可用于拍照的相机。, null, null)

伙计们!我面对的是这个相机版本。它发生在我合并​​我的项目之后。它说没有可用的相机,但当时它运行良好。请看一看!

E/flutter: [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: PlatformException(no_available_camera, No cameras available for taking pictures., null, null)
    #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:582:7)
    #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:159:18)
    <asynchronous suspension>
    #2      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:332:12)
    #3      MethodChannelImagePicker.pickImagePath (package:image_picker_platform_interface/src/method_channel/method_channel_image_picker.dart:62:21)
    #4      MethodChannelImagePicker.pickImage (package:image_picker_platform_interface/src/method_channel/method_channel_image_picker.dart:30:25)
    #5      ImagePicker.getImage (package:image_picker/image_picker.dart:101:21)
    #6      _ImageEvaluationState.getImage (package:PhotoEarn/screens/camera/image_evaluation.dart:201:38)
    #7      _ImageEvaluationState.build.<anonymous closure> (package:PhotoEarn/screens/camera/image_evaluation.dart:1099:33)
    #8      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:993:19)
    #9      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:1111:38)
    #10     GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:183:24)
    #11     TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:598:11)
    #12     BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:287:5)
    #13     BaseTapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:259:7)
    #14     GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:157:27)
    #15     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:362:20)
    #16     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:338:22)
    #17     RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:267:11)
    #18     GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:295:7)
    #19     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:240:7)
    #20     GestureBinding._handlePointerDataPacket …
Run Code Online (Sandbox Code Playgroud)

android-camera android-permissions flutter imagepicker

20
推荐指数
3
解决办法
7220
查看次数

Android上的相机示例

我想写一个活动:

  1. 显示相机预览(取景器),并具有"捕获"按钮.
  2. 按下"捕获"按钮时,拍摄照片并将其返回到调用活动(setResult()&finish()).

是否有适用于每台设备的完整示例?链接到一个简单的开源应用程序拍照将是理想的答案.


我的研究到目前为止:

这是一个常见的场景,有很多问题和教程.

主要有两种方法:

  1. 使用android.provider.MediaStore.ACTION_IMAGE_CAPTURE事件.看到这个问题
  2. 直接使用Camera API.请参阅此示例此问题(包含大量参考).

方法1本来是完美的,但问题是每个设备上的意图实现不同. 在某些设备上它运作良好.但是,在某些设备上,您可以拍照,但它永远不会返回到您的应用.在某些设备上,启动意图时没有任何反应.通常它还将图像保存到SD卡,并且需要存在SD卡.每个设备上的用户交互也不同.

方法2的问题是稳定性.我尝试了一些例子,但我设法阻止相机在某些设备上工作(直到重启)并完全冻结另一台设备.在另一台设备上捕捉工作,但预览保持黑色.

我会使用ZXing作为示例应用程序(我经常使用它),但它只使用预览(取景器),并且不拍任何照片.我还发现,在某些设备上,ZXing在光照条件改变时没有自动调整白平衡,而原生相机应用程序正确地做到了(不确定是否可以修复).


更新:

有一段时间我直接使用了相机API.这提供了更多控制(自定义UI等),但我不建议任何人.我会在90%的设备上工作,但是每次都会发布一个新的设备,但是会遇到不同的问题.

我遇到的一些问题:

  • 处理自动对焦
  • 处理闪光灯
  • 带前置摄像头,后置摄像头或两者的支持设备
  • 每个设备都有不同的屏幕分辨率,预览分辨率(并不总是与屏幕分辨率匹配)和图像分辨率的组合.

所以一般来说,除非没有别的办法,否则我不建议去这条路线.两年后,我通过自定义代码转储并切换回基于Intent的方法.从那时起,我的麻烦就少了很多.我过去在基于意图的方法中遇到的问题可能只是我自己的无能.

如果你真的需要走这条路,我听说如果你只支持Android 4.0+的设备会更容易.

camera android android-camera android-camera-intent

19
推荐指数
1
解决办法
4万
查看次数

自定义相机android

我想camera preview在一个活动中使用.我想添加图像(表面视图上的透明框架).我尝试了以下代码,以便我可以轻松地自定义xml布局:

package com.demo;


import java.io.IOException;

import android.app.Activity;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.Toast;

public class CameraDemoActivity extends Activity implements SurfaceHolder.Callback{
    /** Called when the activity is first created. */
     Camera camera;
     SurfaceView surfaceView;
     SurfaceHolder surfaceHolder;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        getWindow().setFormat(PixelFormat.UNKNOWN);
        surfaceView = (SurfaceView)findViewById(R.id.surfaceview);
        surfaceHolder = surfaceView.getHolder();
        surfaceHolder.addCallback(this);
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        camera = Camera.open();
        if(camera!=null){

            try {
             camera.setPreviewDisplay(surfaceHolder);
             camera.startPreview();
            } catch (IOException e) {
             Toast.makeText(this, (CharSequence) e, Toast.LENGTH_LONG).show();
            }

        } …
Run Code Online (Sandbox Code Playgroud)

camera android surfaceview android-camera

19
推荐指数
1
解决办法
5万
查看次数

在Zxing条码应用程序中获取相机错误

我正在尝试使用Zxing Library开发条形码扫描仪.

我的活动如下:

public class Scanner extends Activity {  

    private static final String PACKAGE = "com.test.scan";  
    private static final String SCANNER = "com.google.zxing.client.android.SCAN";  
    private static final String SCAN_FORMATS = "UPC_A,UPC_E,EAN_8,EAN_13,CODE_39,CODE_93,CODE_128";  
    private static final String SCAN_MODE = "QR_CODE_MODE";  
    public static final int REQUEST_CODE = 1;  

    @Override  
    public void onCreate(Bundle icicle) {  
        super.onCreate(icicle);  

        setContentView(R.layout.main);  

         Button ok;  
         ok = (Button) findViewById(R.id.b1);  
         ok.setOnClickListener(new View.OnClickListener() {  

             public void onClick(View v) {  

                Intent scanIntent = new Intent(SCANNER);  
                scanIntent.setPackage(PACKAGE);  
                scanIntent.addCategory(Intent.CATEGORY_DEFAULT);  
                scanIntent.putExtra("SCAN_FORMATS", SCAN_FORMATS);  
                scanIntent.putExtra("SCAN_MODE", SCAN_MODE);  
                try {  
                    startActivityForResult(scanIntent, …
Run Code Online (Sandbox Code Playgroud)

android barcode-scanner zxing android-camera

19
推荐指数
3
解决办法
2万
查看次数

您的设备似乎不支持相机(或已锁定)

android opencv示例和教程运行正常,突然有一天我得到了所有这些"看来你的设备不支持相机(或它被锁定).应用程序将被关闭"请帮助如何解决

我重新安装了opencv并再次导入并制作了新的模拟器,但问题仍然存在

java android opencv android-camera

19
推荐指数
3
解决办法
3万
查看次数

Camera2 API中的Camera.PreviewCallback等价物

在API 21中的Camera2中是否有相同的Camera.PreviewCallback,比映射到SurfaceTexture并拉出位图更好?我需要能够以YUV的形式从相机中提取预览数据吗?

android yuv android-hardware android-camera android-5.0-lollipop

19
推荐指数
2
解决办法
1万
查看次数

如何使用实时贴纸制作自定义相机

我正在制作一个带有人脸检测的自定义相机,它可以成功运行.

但我想添加贴纸,如记录/预览的脸.眼睛的位置用于在预览上正确调整大小并放置帽子,眼镜和领带等.

使用FaceOverlayView进行人脸检测

public class FaceOverlayView extends View {
    private Paint mPaint;
    private Paint mTextPaint;
    private int mDisplayOrientation;
    private int mOrientation;
    private Face[] mFaces;

    public FaceOverlayView(Context context) {
        super(context);
        initialize();
    }

    private void initialize() {
        // We want a green box around the face:
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setDither(true);
        mPaint.setColor(Color.GREEN);
        mPaint.setAlpha(128);
        mPaint.setStyle(Paint.Style.FILL_AND_STROKE);

        mTextPaint = new Paint();
        mTextPaint.setAntiAlias(true);
        mTextPaint.setDither(true);
        mTextPaint.setTextSize(20);
        mTextPaint.setColor(Color.GREEN);
        mTextPaint.setStyle(Paint.Style.FILL);
    }

    public void setFaces(Face[] faces) {
        mFaces = faces;
        invalidate();
    }

    public void setOrientation(int orientation) {
        mOrientation = …
Run Code Online (Sandbox Code Playgroud)

java android opengl-es face-detection android-camera

19
推荐指数
1
解决办法
3898
查看次数