检查ZXing支持的最简单方法是什么?

时间:2012-07-27 08:35:01

标签: android zxing

我想要一个应用程序使用ZXing条形码扫描程序。我认为ScanningViaIntent是此应用集成扫描的好方法。但是,我想运行时知道用户是否能够使用此应用程序。有一个简单的方法吗?或者我现在应该检查他们的AndroidManifest.xml以查看设备所需的功能+检查用户是否安装了Play商店?

编辑:只是说清楚;我希望代码知道是否有设备支持。我知道ScanningViaIntent处理的应用程序安装不是很好。 :)

4 个答案:

答案 0 :(得分:2)

ZXing团队提供了一个小型代码库来优雅地处理这种情况,包括提示用户下载ZXing条形码扫描器(如果他们还没有安装它)。

可以找到详细信息和下载链接here

我意识到这种联系在这里是不受欢迎的,但除了完全复制链接网站的信息并发布所提供的图书馆的全部内容之外,我无法看到如何充分回答这个问题。关于如何受到赞赏的任何建议

编辑:道歉,我应该检查OPs问题中的链接,看到他已经知道ZXing的IntentIntegrator代码库

答案 1 :(得分:1)

是的,我认为您应该检查用户是否有相机,或者其他类似自动对焦的内容。对于我的一些项目,我必须将ZXing直接集成到项目中以避免这种问题。

但毕竟有些情况只是告诉用户他必须有最低要求才能使用扫描功能就足够了^^

答案 2 :(得分:1)

也许您可以在initiateScan客户端

中执行类似ZXing方法的操作

http://code.google.com/p/zxing/source/browse/trunk/android-integration/src/com/google/zxing/integration/android/IntentIntegrator.java

如果没有安装,它会提示下载ZXing。

答案 3 :(得分:1)

这就是我最终的表现。至少在我找到更好的方法之前。 :)

/**
 * Convenience method for checking for ZXing app support. Requirements found
 * in http://code.google.com/p/zxing/source/browse/trunk/android/AndroidManifest.xml 
 * and
 * http://code.google.com/p/zxing/source/browse/trunk/android-integration/src/com/google/zxing/integration/android/IntentIntegrator.java
 * .
 * 
 * @return boolean true if app is supported, false if not.
 */
protected boolean hasSupportForZxing() {
    PackageManager packageManager = getPackageManager();
    if(!packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)){ // ZXing required away faced camera
        return false;
    }
    if(!packageManager.hasSystemFeature(PackageManager.FEATURE_SCREEN_LANDSCAPE)){ // ZXing requires landscape mode
        if(packageManager.hasSystemFeature(PackageManager.FEATURE_SCREEN_PORTRAIT)){ // PackageManager doc states that if both landscape and portrait support is missing then both are probably supported (compatibility reasons)
            return false;
        }
    }
    if(!isMarketUrisHandled()){
        return false;
    }
    return true;
}

protected boolean isMarketUrisHandled() {
    Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=dummy"));
    List<ResolveInfo> resolveInfos = getPackageManager().queryIntentActivities(marketIntent, 0);
    return resolveInfos.size() > 0;
}