我正在尝试使用Google Play Services (Vision)的新功能将QR码扫描添加到我的应用程序中。但是当我运行我的应用程序时,我得到这个:
I/Vision﹕ Supported ABIS: [armeabi-v7a, armeabi]
D/Vision﹕ Library not found: /data/data/com.google.android.gms/files/com.google.android.gms.vision/barcode/libs/armeabi-v7a/libbarhopper.so
I/Vision﹕ Requesting barcode detector download.
我已经按照教程声明了条形码依赖性:
<meta-data
android:name="com.google.android.gms.vision.DEPENDENCIES"
android:value="barcode" />
我试着重新安装应用程序并重启手机,没有任何帮助。
使用Google Play Services 7.8,设备上安装的版本为7.8.11。
compile 'com.google.android.gms:play-services-vision:7.8.0'
用于创建条形码检测器的代码:
boolean initBarcodeDetector() {
final BarcodeTrackerFactory barcodeTrackerFactory = new BarcodeTrackerFactory(this);
final MultiProcessor<Barcode> multiProcessor = new MultiProcessor.Builder<>(barcodeTrackerFactory)
.build();
barcodeDetector = new BarcodeDetector.Builder(this)
.build();
barcodeDetector.setProcessor(multiProcessor);
if (barcodeDetector.isOperational() == false) {
Toast.makeText(this, R.string.barcode_not_operational, Toast.LENGTH_LONG).show();
finish();
return false;
}
return true;
}
上面的close返回false并结束活动,因为barcodeDetector.isOperational()
返回false
。
Google已经确认了一个错误,他们将很快修复,这阻止了你在某些情况下使用这个条形码/人脸检测库(链接在这里):
- 移动视觉所需的服务现在被禁用,因为该服务存在严重错误。这将防止用户没有已经通过使用这些特征进行面部或条形码检测。我们我不建议在你的应用中添加新的移动视觉功能,直到
- 对于已经使用移动视觉功能的应用,检查FaceDetector.isOperational()或BarcodeDetector.isOperational()在使用人脸或条形码检测器之前确认检测器准备就绪。
它也写在一些问题报告在谷歌的github样本库:
https://github.com/googlesamples/android-vision/issues示例(此处):
新版GMSCore (v9)存在一个已知问题今天刚刚发布
在我清除缓存并释放一些空间后开始工作。我"只有"400mb的可用空间,没有错误信息表明这一点。
根据这里的文档: https://developers.google.com/android/reference/com/google/android/gms/vision/package-summary 和这里: https://developers.google.com/android/reference/com/google/android/gms/vision/Detector#isOperational()
文档:
public boolean ()
指示检测器是否具有所有必需的依赖项本地可用,以便进行检测。
第一次安装应用程序时,可能需要下载所需的文件。如果返回false,则这些文件还没有可用。通常这个下载是在应用程序中完成的安装时间,但不能保证。在某些情况下下载可能被耽搁了。
如果您的代码添加了处理器,则表示检测器操作状态也用detectorIsOperational()表示方法。你可以在应用程序处理检测时检查这个如果合适,可以将此状态传递给用户。
如果检测器是可操作的返回•true,如果是依赖项返回false下载正在进行
和
public boolean detectorIsOperational()
如果检测器运行则返回true,否则返回false操作。在非操作情况下,检测器将返回no结果。
启动应用程序时,检测器可能会有一段时间不运行第一次,如果需要下载获取关联的检测所需的库和模型文件。
看起来你的设备需要通过Google Play服务完成库的下载,以便你的应用程序立即工作。
基于Google样本(源代码中的注释):
// Note: The first time that an app using the barcode or face API is installed on a
// device, GMS will download a native libraries to the device in order to do detection.
// Usually this completes before the app is run for the first time. But if that
// download has not yet completed, then the above call will not detect any barcodes
// and/or faces.
//
// isOperational() can be used to check if the required native libraries are currently
// available. The detectors will automatically become operational once the library
// downloads complete on device.
https://github.com/googlesamples/android-vision/blob/master/visionSamples/multi-tracker/app/src/main/java/com/google/android/gms/samples/vision/face/multitracker/MultiTrackerActivity.java#L156
我也经历过这种情况,在我的一个测试设备上找不到视觉库,虽然控制台在每次启动应用程序时都显示了对库的请求,但从未完成。我在Nexus 4、5、摩托罗拉X2、三星s2 -6和其他各种设备上进行了测试,只有S5存在这个问题。有足够的可用空间超过2Gb,在硬复位设备后,扫描立即按预期工作。
2020年9月:这个版本有:
implementation 'com.google.android.gms:play-services-vision:20.1.2'
我也有同样的经历。(抱歉,我不能评论添加我的案例,因为我只有一个代表)我用的是Nexus 5(2013)和marshmallow(6.0)。我一开始有1gb的可用空间,但没有成功,2gb也没有成功。我最终释放了另外1gb(所以3gb的可用空间),然后它成功了。
Mobile Vision操作在Google Play Services v9.2中恢复https://developers.google.com/vision/release-notes google_play_services_92
发布说明
这里是对移动视觉API的更新,对应于Google Play服务发布
Google Play Services 9.2
Bug修复
Mobile Vision操作在Google Play Services v9.2中恢复。拥有新版本的用户将能够下载所需的文件并利用由移动视觉提供支持的应用程序功能。的Google Play Services更新还包括配置更新移动视觉修复的一部分。通常每更新一次几天,但它也会发生在手机重启(虽然这是它是节流的,因此不能保证更新配置)。由于文件下载错误仍然可能发生(例如,如果有设备存储空间不足),我们建议使用Google Play服务开发者调用FaceDetector.isOperational()或isoperational()来检查检测器是否准备就绪相应降低特征操作。