- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我的 Flutter 应用程序使用相机插件和条形码阅读器插件来拍摄和扫描产品。当我先打开阅读器然后拍照时,一切正常。但是,如果我先打开相机,条码扫描仪在识别条码时会崩溃。我认为问题出在相机页面上,因为我尝试了多个扫描仪,但每次都出现相同的错误:
java.lang.IllegalArgumentException: Surface was abandoned
E/AndroidRuntime(26336): at android.hardware.camera2.utils.SurfaceUtils.getSurfaceSize(SurfaceUtils.java:70)
E/AndroidRuntime(26336): at android.hardware.camera2.params.OutputConfiguration.<init>(OutputConfiguration.java:237)
E/AndroidRuntime(26336): at android.hardware.camera2.params.OutputConfiguration.<init>(OutputConfiguration.java:101)
E/AndroidRuntime(26336): at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureSession(CameraDeviceImpl.java:499)
E/AndroidRuntime(26336): at io.flutter.plugins.camera.CameraPlugin$Camera.startPreview(CameraPlugin.java:672)
E/AndroidRuntime(26336): at io.flutter.plugins.camera.CameraPlugin$Camera.access$2000(CameraPlugin.java:237)
E/AndroidRuntime(26336): at io.flutter.plugins.camera.CameraPlugin$Camera$3.onOpened(CameraPlugin.java:437)
E/AndroidRuntime(26336): at android.hardware.camera2.impl.CameraDeviceImpl$1.run(CameraDeviceImpl.java:139)
E/AndroidRuntime(26336): at android.os.Handler.handleCallback(Handler.java:789)
E/AndroidRuntime(26336): at android.os.Handler.dispatchMessage(Handler.java:98)
E/AndroidRuntime(26336): at android.os.Looper.loop(Looper.java:164)
E/AndroidRuntime(26336): at android.app.ActivityThread.main(ActivityThread.java:6938)
E/AndroidRuntime(26336): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(26336): at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
E/AndroidRuntime(26336): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
E/AndroidRuntime(26336): Caused by: android.hardware.camera2.legacy.LegacyExceptionUtils$BufferQueueAbandonedException
E/AndroidRuntime(26336): at android.hardware.camera2.legacy.LegacyExceptionUtils.throwOnError(LegacyExceptionUtils.java:73)
E/AndroidRuntime(26336): at android.hardware.camera2.legacy.LegacyCameraDevice.getSurfaceSize(LegacyCameraDevice.java:583)
E/AndroidRuntime(26336): at android.hardware.camera2.utils.SurfaceUtils.getSurfaceSize(SurfaceUtils.java:68)
打开扫描仪的函数(使用:https://pub.dartlang.org/packages/barcode_scan):
scan() async{
try {
String barcode = await BarcodeScanner.scan();
setState(() {
_nummer = barcode;
_nummerController.text = _nummer;
});
} on PlatformException catch (e) {
if (e.code == BarcodeScanner.CameraAccessDenied) {
} else {
}
} on FormatException{
} catch (e) {
}
}
打开我的相机页面的函数:
takePhoto() async {
final result = await Navigator.push(
context, MaterialPageRoute(builder: (context) => new CameraApp()));
setState(() {
_image = result.toString();
});
}
我的 camera.dart 文件(使用:https://pub.dartlang.org/packages/camera)
import 'dart:async';
import 'dart:io';
import 'package:camera/camera.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
class CameraApp extends StatefulWidget {
@override
_CameraAppState createState() => new _CameraAppState();
}
class _CameraAppState extends State<CameraApp> {
CameraController controller;
List<CameraDescription> cameras;
bool _isReady = false;
final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
Future<void> _setupCameras() async {
try {
// initialize cameras.
cameras = await availableCameras();
// initialize camera controllers.
controller = new CameraController(cameras[0], ResolutionPreset.medium);
await controller.initialize();
} on CameraException catch (_) {
// do something on error.
}
if (!mounted) return;
setState(() {
_isReady = true;
});
}
@override
void initState() {
super.initState();
_setupCameras();
}
@override
void dispose() {
controller?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
double width = MediaQuery.of(context).size.width;
double height = MediaQuery.of(context).size.height;
if(controller == null){
return new Scaffold(
appBar: new AppBar(
brightness: Brightness.light,
backgroundColor: const Color.fromRGBO(127, 22, 22, 1.0),
leading: new GestureDetector(
child: new Icon(Icons.close),
onTap: () {
Navigator.pop(context);
},
),
title: new Text("Wein hinzufügen"),
),
body: new Center(child:
new Column(
children: <Widget>[
new Container(child: new Text("Es ist ein Fehler aufgetreten!", style: new TextStyle(fontSize: 24.0)), margin: new EdgeInsets.only(top: 40.0, bottom: 10.0),),
new Container(child: new Text("Eventuell keine Kamera Erlaubniss.", style: new TextStyle(fontSize: 14.0),),),
new Container(margin: new EdgeInsets.only(top: 100.0),child: new GestureDetector( onTap: _setupCameras,
child: new Image.asset("assets/images/refresh.png", width: 60.0, height: 60.0,)
),
),
]
))
);
}else{
if (!controller.value.isInitialized) {
return new Scaffold(
appBar: new AppBar(
brightness: Brightness.light,
backgroundColor: const Color.fromRGBO(127, 22, 22, 1.0),
leading: new GestureDetector(
child: new Icon(Icons.close),
onTap: () {
Navigator.pop(context);
},
),
title: new Text("Wein hinzufügen"),
),
body: new Center(child:
new Column(
children: <Widget>[
new Container(child: new Text("Es ist ein Fehler aufgetreten!", style: new TextStyle(fontSize: 24.0)), margin: new EdgeInsets.only(top: 40.0, bottom: 10.0),),
new Container(child: new Text("Eventuell keine Kamera Erlaubniss.", style: new TextStyle(fontSize: 14.0),),),
new Container(margin: new EdgeInsets.only(top: 100.0),child: new GestureDetector( onTap: _setupCameras,
child: new Image.asset("assets/images/refresh.png", width: 60.0, height: 60.0,)
),
),
]
))
);
}else {
return new Scaffold(
key: _scaffoldKey,
resizeToAvoidBottomPadding: false,
appBar: new AppBar(
brightness: Brightness.light,
backgroundColor: const Color.fromRGBO(127, 22, 22, 1.0),
leading: new GestureDetector(
child: new Icon(Icons.close),
onTap: () {
Navigator.pop(context);
},
),
title: new Text("Wein hinzufügen"),
),
body: new Column(children: <Widget>[
new Stack(alignment: Alignment.center, children: <Widget>[
new AspectRatio(
aspectRatio: controller.value.aspectRatio,
child: new CameraPreview(controller)),
new Container(
width: width * 0.6,
height: width * 0.8,
decoration: new BoxDecoration(
shape: BoxShape.rectangle,
color: const Color.fromRGBO(229, 229, 229, 0.3),
border: new Border.all(
color: const Color.fromRGBO(127, 22, 22, 1.0),
width: 1.0),
),
)
]),
new Expanded(
child: new GestureDetector(
onTap: onTakePictureButtonPressed,
child: new Container(
color: Colors.black,
child: new Center(
child: new Container(
width: 70.0,
height: 70.0,
decoration: new BoxDecoration(
boxShadow: [
new BoxShadow(
color: Colors.black, blurRadius: 20.0)
],
border: new Border.all(
color: const Color.fromRGBO(
92, 13, 13, 1.0),
width: 8.0),
color: const Color.fromRGBO(127, 22, 22, 1.0),
shape: BoxShape.circle),
),
),
)))
]));
}
}
}
String timestamp() => new DateTime.now().millisecondsSinceEpoch.toString();
void onTakePictureButtonPressed() {
takePicture().then((String filePath) {
if (mounted) {
setState(() {
});
if (filePath != null){
showInSnackBar('Picture saved to $filePath');
controller.dispose();
Navigator.pop(context, filePath);
}
}
});
}
Future<String> takePicture() async {
if (!controller.value.isInitialized) {
showInSnackBar("Error, bitte versuchen sie es erneut!");
return null;
}
final Directory extDir = await getApplicationDocumentsDirectory();
final String dirPath = '${extDir.path}/Bilder/Notizen';
await new Directory(dirPath).create(recursive: true);
final String filePath = '$dirPath/${timestamp()}.png';
if (controller.value.isTakingPicture) {
// A capture is already pending, do nothing.
return null;
}
try {
await controller.takePicture(filePath);
} on CameraException catch (e) {
showInSnackBar(e.toString());
return null;
}
return filePath;
}
void showInSnackBar(String message) {
_scaffoldKey.currentState
.showSnackBar(new SnackBar(content: new Text(message)));
}
}
最佳答案
我的相机拍照功能崩溃了。
"java.lang.NullPointerException: Attempt to invoke virtual method 'intio.flutter.embedding.engine.systemchannels.PlatformChannel$DeviceOrientation.ordinal()'on a null object reference E/AndroidRuntime(18591): atio.flutter.plugins.camera.DeviceOrientationManager.getMediaOrientation(DeviceOrientationManager.java:58)"
对我帮助添加在 initialize() 之后等待 controller.lockCaptureOrientation()。试试这个,也许它会帮助你
try {
...
await controller.initialize();
await controller.lockCaptureOrientation();
}
关于android - Flutter Camera Plugin 导致条形码阅读器崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51861899/
我有一个正在动态生成的条形码,并希望传递给 gsp,该 gsp 稍后将变成 pdf。我不需要出于自己的任何目的保留条形码,只想将图像从 Controller 传递到 gsp。 有没有办法渲染作为变量传
我正在研究苹果“passkit”框架。我已经制作了 lolipop 优惠券,正如它在 guide 中所说的那样. - 创建证书(Apple Dev 网站)我已经编译了.pkpass。 现在我必须使用动
我有这样的代码 $('.testbarcode').barcode('1234567', "code128"); 当我设置样式时它是折线,那么我如何才能将此条码的宽度设置得
我正在将 Visual Basic 应用程序转换为 Python Django。目前,它具有条形码功能来处理商店的销售。这可以用 python django 实现吗? 最佳答案 如果您对条形码功能的定
我正在尝试按照此示例使用条形码 API https://github.com/googlesamples/android-vision/tree/master/visionSamples/barcod
这是我到目前为止所得到的: def encodeFive(zip): zero = "||:::" one = ":::||" two = "::|:|" t
我正在尝试创建具有本文所示格式的条形码:http://www.thebookdesigner.com/2009/10/self-publishing-basics-deciphering-the-bo
我需要一些关于如何从 bmp 文件中获取 12 位条形码的指导,我完全不知道如何处理这个问题。我首先将图像读入 bitmam,我该如何继续? 例子:下图的条码是081034489030。我如何获得这些
谁能告诉我从哪里开始编码以便从 C# 中的 OPOS(Datalogic Magellan 设备)加权和条形码扫描中获取数据?例如,在这种情况下我应该使用什么库和什么函数。我一无所知,因为我已经花了很
使用 zxing,我设法将 Code39 条形码保存为 PNG,但它只显示条形,没有数字。我怎样才能在一个 PNG 中包含条形码和编号? KI 最佳答案 您无法使用 zxing 添加号码。您可以做一些
我正在尝试将扫描的条形码用作 SQL 查询中的变量。我正在使用 Google ML Kit Quick Start项目。我有一个使用 jtds1.3.1 制作的连接和查询功能。我只是无法获得要在查询中
我尝试让程序从下面的代码中读取 EAN13,但它不起作用 func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metada
我必须读取 PDF 文件中的数据矩阵代码,我正在研究其可能性,对此我有一些疑问: 1.- 我与 Itext 合作,我正在寻找有关使用此库读取此 QR 条形码的可能性的信息,但我没有相关结果,这可能吗?
文档和头文件不包含任何与支持 3D 条形码相关的信息。但是,明确提到 AVMetadataMachineReadableCodeObject 支持一维和二维条码。因此,有人知道 AVFoundatio
我一直在寻找解决方案,到目前为止,我认为对我的项目来说最好的解决方案是使用免费的 Code 39 字体。但是,我已经尝试打印一些样本,但我的条形码扫描仪无法读取它们。 我进行了更多研究,偶然发现了 t
生成 3 of 9 很容易条形码使用 Font() Font f = new Font("Free 3 of 9", 80); this.Font = f; Label l = new Label()
愚蠢的我,我以为只要用条形码字体写一些文本,就会让扫描仪读取它。看来我错了。 所以在阅读了一些关于 code128 条形码的文档之后,我了解到: 条形码以(103、104 或 105 取决于类型)开头
我想在 WPF 应用程序中区分(条形码)扫描仪和键盘输入。 我需要的是每当我的扫描仪提供数据时发生的事件。 在我的应用程序中有一个特殊的字段,它将填充来自扫描仪的输入。因此,如果用户关注其他领域,我不
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
是否可以将 ZPL 和二进制数据用于 aztec 条形码? 我尝试使用BluetoothConnection写入发送以UTF8和字节数据编码的字符串连接数组/ String zplStart; byt
我是一名优秀的程序员,十分优秀!