gpt4 book ai didi

Android Camera 不会拍照,具体取决于代码中的内容

转载 作者:行者123 更新时间:2023-11-30 04:17:30 25 4
gpt4 key购买 nike

我有以下代码,我试图用它来拍照并将一些照片的信息保存到数据库中。数据库部分已经过全面测试,在所有其他情况下都能正常工作。不幸的是,如果我取消注释下面的注释代码,我的代码就会超时。出于某种原因,如果 this.camera.takePicture() 方法后面有代码,takePicture() 将不会调用重写的 onPictureTaken方法(它应该做的第一件事是打印出一行文本,但它甚至没有这样做)。如果后面没有代码,它可以正常工作。

在安装 latch 之前,我会得到一个错误,因为 ph.getPhoto() 正在返回 null(ph 的 .photo 成员变量是尚未由 onPictureTaken() 设置,因为它尚未被调用)。安装闩锁后,它将一直等到超时(或永远,如果没有指定超时值)。

有人可以告诉我我缺少什么吗?

    public void takePicture(View view) throws Exception {
CountDownLatch latch = new CountDownLatch(1);
System.out.println("Taking Photo!");
PhotoHandler photoHandler = new PhotoHandler(getApplicationContext(),latch);
this.camera.takePicture(null, null, photoHandler);

/* PhotoHandler has an overridden "onPictureTaken()" method which releases the latch as its final
* action; however, its first instruction is to print a confirmation that it has been accessed.
* Unfortunately, for some reason, onPictureTaken() is not called if the following code is
* uncommented; it deadlocks for the five seconds before timing out. However, with out the following,
* the camera.takePicture method invokes onPictureTaken() and it works just fine. */


// latch.await(5,TimeUnit.SECONDS);
// DatabaseHandler db = new DatabaseHandler(this);
// Photo p = photoHandler.getPhoto();
// db.addPhoto(p);
// List<Photo> photos = new ArrayList<Photo>();
// photos.add(p);
// this.addPhotosToMap(photos);
}

最佳答案

onPictureTaken() (afaik) 在主/UI 线程上执行。如果您的 takePicture 方法也在那里执行,那么它一定会发生,因为线程不能等待自己。

此外,您不能阻塞主线程,否则您的 Activity 将出现 ANR。

如果您将注释代码(减去那个闩锁)移动到 onPictureTaken() 那么一切都应该没问题。那些 onSomethingHappened 回调正是为那个任务而做的

关于Android Camera 不会拍照,具体取决于代码中的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9762784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com