java - 如何在 Android 中没有 UI 或用户交互的情况下拍摄大量照片?

标签 java android

好吧,我正在开发一个应用程序,它必须拍照并将它们发送到服务器进行处理。我需要这个来进行一些图像识别,最终有助于控制机器人。基本上我需要使用 Android 设备作为发送图片的网络摄像头。我弄清楚了套接字部分,但现在在摆弄了一些代码几天后,我最终得到了这个:

public class MainActivity extends AppCompatActivity {
public static final String dTag = "DBG";
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button trg = (Button)findViewById(R.id.trigger_btn);
    trg.setOnClickListener(new Button.OnClickListener(){
        @Override
        public void onClick(View v)
        {
            SurfaceHolder mSurfaceHolder = new SurfaceHolder() {
                @Override
                public void addCallback(Callback callback) {

                }

                @Override
                public void removeCallback(Callback callback) {

                }

                @Override
                public boolean isCreating() {
                    return false;
                }

                @Override
                public void setType(int type) {

                }

                @Override
                public void setFixedSize(int width, int height) {

                }

                @Override
                public void setSizeFromLayout() {

                }

                @Override
                public void setFormat(int format) {

                }

                @Override
                public void setKeepScreenOn(boolean screenOn) {

                }

                @Override
                public Canvas lockCanvas() {
                    return null;
                }

                @Override
                public Canvas lockCanvas(Rect dirty) {
                    return null;
                }

                @Override
                public void unlockCanvasAndPost(Canvas canvas) {

                }

                @Override
                public Rect getSurfaceFrame() {
                    return null;
                }

                @Override
                public Surface getSurface() {
                    return null;
                }
            };
            Camera.PictureCallback mCall = new Camera.PictureCallback()
            {
                @Override
                public void onPictureTaken(byte[] data, Camera camera)
                {
                    ByteArrayInputStream inputStream = new ByteArrayInputStream(data);
                    Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                    ImageView imW = (ImageView)findViewById(R.id.imView);
                    imW.setImageBitmap(bitmap);
                    Log.d(dTag, "" + data.length);
                }
            };
            mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
            Camera mCamera;
            mCamera = Camera.open();
            try {
                mCamera.setPreviewDisplay();
                mCamera.startPreview();
            }
            catch(IOException e){
                Log.d(dTag, "Cam is null!");
            }
            mCamera.takePicture(null, null, mCall);
            mCamera.stopPreview();
            mCamera.release();
        }
    });

}

现在,每当我按下按钮时,我都会在调试日志中看到“D/Camera:应用程序传递了 NULL 表面”,我认为这是因为 mSurfaceHolder 未正确声明。如果有人能指出我的问题是什么以及如何解决它,我将不胜感激,因为我对 java 没有很好的理解,并且似乎无法在互联网上找到任何可用的东西。

最佳答案

几个问题-

  1. 您没有表面 View ,必须从表面 View 获取表面支架。您只是无法为此目的创建"new"。

  2. 您没有在mCamera.setPreviewDisplay();中传递任何surfaceolder,因此系统无法决定在哪里显示。

  3. 您的方法本地匿名内部类完全是错误的。

教程链接:http://examples.javacodegeeks.com/android/core/ui/surfaceview/android-surfaceview-example/

关于java - 如何在 Android 中没有 UI 或用户交互的情况下拍摄大量照片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35117995/

相关文章:

java - 如何对我的数据库内容进行单元测试?

java - 卡在 Android.os.Bundle 上且对象引用为空

javascript - 使用 Java 从网络下载生成的图像

java - Joda-time Period 似乎无法正确计算天数

java - RxAndroid : UI changes on Schedulers. io() 线程

java - 谷歌地图, map 正在加载,但未完全加载

java - 即使应用程序被强制停止也重新启动服务并且即使在关闭应用程序后也保持在后台运行服务如何?

android - 获取纬度和经度的负值

java - @AttributeOverride 不适用于 Hibernate 5

java - REST API - 嵌套对象