我是android新手。我正在开发一个应用程序,我必须使用zxing扫描条形码 和QR码。在我的应用程序中,我无法使用第三方软件。这意味着我无法在我的应用程序中使用这些代码
IntentIntegrator integrator = new IntentIntegrator(shopping.this);
integrator.initiateScan();
因此,在这种情况下,我在阅读了几篇教程之后使用了这些行代码。
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.setPackage("com.google.zxing.client.android");
// intent.putExtra("SCAN_MODE", "PRODUCT_MODE");
intent.putExtra("SCAN_FORMATS", "CODE_39,CODE_93,CODE_128,DATA_MATRIX,ITF,CODABAR,EAN_13,EAN_8,UPC_A,QR_CODE");
startActivityForResult(intent, 0);
但遗憾的是,这显示了Exception,我的log-cat总输出如下 -
01-06 06:00:02.131: D/AndroidRuntime(956): Shutting down VM
01-06 06:00:02.131: W/dalvikvm(956): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
01-06 06:00:02.161: E/AndroidRuntime(956): FATAL EXCEPTION: main
01-06 06:00:02.161: E/AndroidRuntime(956): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.google.zxing.client.android.SCAN pkg=com.google.zxing.client.android (has extras) }
01-06 06:00:02.161: E/AndroidRuntime(956): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1545)
01-06 06:00:02.161: E/AndroidRuntime(956): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1416)
01-06 06:00:02.161: E/AndroidRuntime(956): at android.app.Activity.startActivityForResult(Activity.java:3351)
01-06 06:00:02.161: E/AndroidRuntime(956): at android.app.Activity.startActivityForResult(Activity.java:3312)
01-06 06:00:02.161: E/AndroidRuntime(956): at com.google.zxing.shopping.shopping$1.onClick(shopping.java:99)
01-06 06:00:02.161: E/AndroidRuntime(956): at android.view.View.performClick(View.java:4084)
01-06 06:00:02.161: E/AndroidRuntime(956): at android.view.View$PerformClick.run(View.java:16966)
01-06 06:00:02.161: E/AndroidRuntime(956): at android.os.Handler.handleCallback(Handler.java:615)
01-06 06:00:02.161: E/AndroidRuntime(956): at android.os.Handler.dispatchMessage(Handler.java:92)
01-06 06:00:02.161: E/AndroidRuntime(956): at android.os.Looper.loop(Looper.java:137)
01-06 06:00:02.161: E/AndroidRuntime(956): at android.app.ActivityThread.main(ActivityThread.java:4745)
01-06 06:00:02.161: E/AndroidRuntime(956): at java.lang.reflect.Method.invokeNative(Native Method)
01-06 06:00:02.161: E/AndroidRuntime(956): at java.lang.reflect.Method.invoke(Method.java:511)
01-06 06:00:02.161: E/AndroidRuntime(956): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-06 06:00:02.161: E/AndroidRuntime(956): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-06 06:00:02.161: E/AndroidRuntime(956): at dalvik.system.NativeStart.main(Native Method)
但是,当我只是替换这一行
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
到这一行
Intent intent = new Intent(shopping.this, CaptureActivity.class);
我运行我的应用程序它成功运行了我,但问题是它只扫描** QR码,它不适用于BAR代码。 为方便那些想要帮助我显示我的清单文件的人
<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xyrad.xybuy"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" >
</uses-permission>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="15" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature
android:name="android.hardware.camera.autofocus"
android:required="false" />
<uses-feature
android:name="android.hardware.camera.flash"
android:required="false" />
<uses-feature android:name="android.hardware.screen.landscape" />
<uses-feature
android:name="android.hardware.wifi"
android:required="false" />
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<application
android:hardwareAccelerated="true"
android:icon="@drawable/logo_xybuy"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<uses-library
android:name="com.google.android.maps"
android:required="true" />
<activity
android:name=".RegisterCustomer"
android:label="@string/title_activity_register_customer" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- BarCodeScanner -->
<activity
android:name="com.google.zxing.client.android.CaptureActivity"
android:clearTaskOnLaunch="true"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="landscape"
android:stateNotNeeded="true"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:windowSoftInputMode="stateAlwaysHidden" ><intent-filter>
<action android:name="com.google.zxing.client.android.SCAN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.ALTERNATIVE" />
</intent-filter>
<!-- Allow web apps to launch Barcode Scanner by linking to http://zxing.appspot.com/scan. -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="zxing.appspot.com"
android:path="/scan"
android:scheme="http" />
</intent-filter>
<!-- We also support a Google Product Search URL. -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="www.google.com"
android:path="/m/products/scan"
android:scheme="http" />
</intent-filter>
<!-- And the UK version. -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="www.google.co.uk"
android:path="/m/products/scan"
android:scheme="http" />
</intent-filter>
<!-- Support zxing://scan/?... like iPhone app -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="scan"
android:path="/"
android:scheme="zxing" />
</intent-filter>
</activity>
<activity
android:name="com.google.zxing.client.android.PreferencesActivity"
android:label="@string/preferences_name"
android:stateNotNeeded="true" >
</activity>
<activity
android:name="com.google.zxing.client.android.encode.EncodeActivity"
android:label="@string/share_name"
android:stateNotNeeded="true" >
<intent-filter>
<action android:name="com.google.zxing.client.android.ENCODE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<!-- This allows us to handle the Share button in Contacts. -->
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/x-vcard" />
</intent-filter>
<!-- This allows us to handle sharing any plain text . -->
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
<activity
android:name="com.google.zxing.client.android.history.HistoryActivity"
android:label="@string/history_title"
android:stateNotNeeded="true" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:name="WelcomeCustomerSplash" >
</activity>
<activity android:name="HomePage" >
</activity>
<activity android:name=".buy.BuyClick" >
</activity>
<activity android:name=".shoppinglistmanage.ShoppingListManageCompulsory" >
</activity>
<activity android:name=".otw.OtwClick" >
</activity>
<activity android:name=".buy.ClickIHaveList" >
</activity>
<activity android:name=".buy.WaitToPopulateData" >
</activity>
<activity android:name=".buy.ListWithDiscountNetPrice" >
</activity>
<activity android:name=".buy.PaymentOption" >
</activity>
<activity android:name=".buy.PurchaseItemList" >
</activity>
<activity android:name=".buy.UnPurchaseItemList" >
</activity>
<activity android:name=".googlemap.LocateForNearestStore" >
</activity>
<activity android:name=".googlemap.WhereIam" >
</activity>
<activity android:name=".paymentgateway.ShoppingPaymentGatewayPayPalActivity" >
</activity>
<activity
android:name="com.paypal.android.MEP.PayPalActivity"
android:configChanges="keyboardHidden|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>
<activity
android:name="com.google.zxing.shopping.PurchaseList"
android:configChanges="orientation|keyboardHidden" >
</activity>
<activity android:name="com.google.zxing.shopping.DeviceListActivity" >
</activity>
<activity android:name="com.google.zxing.shopping.shopping" >
</activity>
<!-- purchase -->
<!-- DeviceList -->
<activity android:name="com.google.zxing.shopping.DataLayer" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.payment.BillingAddress" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.cart.ListCart" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.category.ListCategory" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.subcategory.ListCategorySubCategory" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.subcategory.TabSubCategory" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.catalog.ListCatalog" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.checkout.ListCheckOut" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.item.ItemDetails" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.item.ListItem" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.item.ItemReview" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.merchant.ListMerchant" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.merchant.TabMerchant" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.payment.ModeOfPayment" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.offer.ListOffer" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.payment.Payment" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.category.TabCategry" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.item.TabItem" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.item.TabItemDetails" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.item.TabItemDetailsAndReview" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.deparment.ListDepartment" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.catalog.TabCatalog" >
</activity>
<activity android:name="com.xyrad.xybuy.ecommerce.subcategory.TabSubCategoryegory.TabSubCategoryegory.TabSubCategory" >
</activity>
</application>
<!-- Category -->
所以,这是我对我的问题的描述。所以请有人帮助我。我衷心感谢所有来自我心底的人。 提前感谢所有人。
答案 0 :(得分:0)
您在手机或模拟器中安装了第三方应用程序吗?
Android操作系统找不到该活动。
01-06 06:00:02.161: E/AndroidRuntime(956): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.google.zxing.client.android.SCAN pkg=com.google.zxing.client.android (has extras) }
使用try和catch块,确保应用程序已安装在手机中,如果不是:将用户指向Playstore上的第三方应用程序。
答案 1 :(得分:0)
使用提供的IntentIntegrator类,因为它将处理您需要处理的案例,例如未安装的应用程序。
答案 2 :(得分:0)
您正在获取ActivityNotFoundException,因为您的设备中未安装Zxing应用程序。所以请检查它是否已安装。如果不是那么将用户重定向到Zxing的playstore-page:
我为这些实现了一些代码。根据您的需要进行修改:
boolean isZxingInstalled;
/*
*Checking whether Zxing is installed or not
*/
try
{
ApplicationInfo info = getPackageManager().getApplicationInfo("com.google.zxing.client.android", 0 );
boolean isZxingInstalled = true;
}
catch(PackageManager.NameNotFoundException e){
isZxingInstalled=false;
}
/*
* Store the boolean value on the basis of Zxing is installed or not
*/
if(isZxingInstalled) //If it is then intent Zxing application
{
//start the facebook app
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.setPackage("com.google.zxing.client.android");
intent.putExtra("SCAN_MODE", "PRODUCT_MODE");
intent.putExtra("SCAN_FORMATS", "CODE_39,CODE_93,CODE_128,DATA_MATRIX,ITF,CODABAR,EAN_13,EAN_8,UPC_A,QR_CODE");
startActivityForResult(intent, 0);
}
else //It's not then redirect user to PlayStore-ZxingPlage
{
/*
*Checking whether PlayStore is installed in device or not?
*/
boolean isPlayStoreInstalled
try
{
ApplicationInfo i=getPackageManager().getApplicationInfo("com.google.vending", 0 );
boolean isPlayStoreInstalled = true;
}
catch(PackageManager.NameNotFoundException e){
isPlayStoreInstalled=false;
}
/*
* If it is the download Zxing
*/
if(isPlayStoreInstalled)
{
Intent DownloadZxing = new Intent(Intent.ACTION_VIEW,Uri.parse("market://detailsid=com.google.zxing.client.android"));
startActivity(DownloadZxing);
}
else //Toast message indicating No PlayStore Found
{
Toast.makeText(this,"Install PlayStore First",Toast.LENGHT_SHORT).show();
}
}
希望这些可能会有所帮助!! :)