整合ZXing库:PackageManager $的NameNotFoundExceptionZXing、PackageManager、NameNotFoundException

2023-09-04 07:12:54 作者:拟墨画扇

我使用zxing图书馆,在那里我已经建立ZXing的Andr​​oid使用Eclipse和包括ZXing的Andr​​oid到我的项目 而poject清单是

 < XML版本=1.0编码=UTF-8&GT?;
<舱单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    包=phoenix.metro.uis
    安卓版code =4
    机器人:VERSIONNAME =1.2>

    <使用-SDK安卓的minSdkVersion =8/>

    <使用-权限的Andr​​oid:名称=android.permission.CAMERA/>
    <使用-权限的Andr​​oid:名称=android.permission.INTERNET对/>
    <使用-权限的Andr​​oid:名称=android.permission.ACCESS_NETWORK_STATE/>

    <应用
        机器人:图标=@可绘制/地铁
        机器人:标签=@字符串/ APP_NAME
        机器人:主题=@安卓风格/ Theme.NoTitleBar>
        <活动
            机器人:名称=MainActivity
            机器人:标签=@字符串/ APP_NAME
            机器人:screenOrientation =画像>
        < /活性GT;
        <活动
            机器人:名称=com.google.zxing.client.android.CaptureActivity
            机器人:configChanges =方向| keyboardHidden
            机器人:screenOrientation =风景
            机器人:主题=@安卓风格/ Theme.NoTitleBar.Fullscreen
            机器人:windowSoftInputMode =stateAlwaysHidden>
            <意向滤光器>
                <作用机器人:名称=android.intent.action.MAIN/>

                <类机器人:名称=android.intent.category.DEFAULT/>
            &所述; /意图滤光器>
            <意向滤光器>
                <作用机器人:名称=com.google.zxing.client.android.SCAN/>

                <类机器人:名称=android.intent.category.DEFAULT/>
            &所述; /意图滤光器>
        < /活性GT;
        <活动机器人:名称=。PhoenixSplashActivity>
            <意向滤光器>
                <作用机器人:名称=android.intent.action.MAIN/>

                <类机器人:名称=android.intent.category.LAUNCHER/>
            &所述; /意图滤光器>
        < /活性GT;
        <活动
            机器人:名称=SearchActivity
            机器人:多进程=假
            机器人:screenOrientation =画像>
        < /活性GT;
        <活动
            机器人:名称=OffersActivity
            机器人:screenOrientation =画像>
        < /活性GT;
        <活动
            机器人:名称=。CartsActivity
            机器人:screenOrientation =画像>
        < /活性GT;
        <活动
            机器人:名称=GANDActivity
            机器人:screenOrientation =画像>
        < /活性GT;
        <活动
            机器人:名称=MetroActivity
            机器人:screenOrientation =画像>
        < /活性GT;
        <活动机器人:名称=AddItemActivity>
        < /活性GT;
        <活动
            机器人:名称=。AboutUsActivity
            机器人:screenOrientation =画像>
        < /活性GT;
    < /用途>

< /舱单>
 

但我得到异常:

  10-01 23:00:29.227:W / CaptureActivity(539):android.content.pm.PackageManager $的NameNotFoundException:com.google.zxing.client.android
10-01 23:00:29.227:W / CaptureActivity(539):在android.app.ContextImpl $ ApplicationPackageManager.getPackageInfo(ContextImpl.java:1682)
10-01 23:00:29.227:W / CaptureActivity(539):在com.google.zxing.client.android.CaptureActivity.showHelpOnFirstLaunch(CaptureActivity.java:693)
10-01 23:00:29.227:W / CaptureActivity(539):在com.google.zxing.client.android.CaptureActivity.onCreate(CaptureActivity.java:169)
10-01 23:00:29.227:W / CaptureActivity(539):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-01 23:00:29.227:W / CaptureActivity(539):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
10-01 23:00:29.227:W / CaptureActivity(539):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
10-01 23:00:29.227:W / CaptureActivity(539):在android.app.ActivityThread.access $ 1500(ActivityThread.java:117)
10-01 23:00:29.227:W / CaptureActivity(539):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:931)
10-01 23:00:29.227:W / CaptureActivity(539):在android.os.Handler.dispatchMessage(Handler.java:99)
10-01 23:00:29.227:W / CaptureActivity(539):在android.os.Looper.loop(Looper.java:123)
10-01 23:00:29.227:W / CaptureActivity(539):在android.app.ActivityThread.main(ActivityThread.java:3683)
10-01 23:00:29.227:W / CaptureActivity(539):在java.lang.reflect.Method.invokeNative(本机方法)
10-01 23:00:29.227:W / CaptureActivity(539):在java.lang.reflect.Method.invoke(Method.java:507)
10-01 23:00:29.227:W / CaptureActivity(539):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
10-01 23:00:29.227:W / CaptureActivity(539):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-01 23:00:29.227:W / CaptureActivity(539):在dalvik.system.NativeStart.main(本机方法)
 

解决方案

这个问题的原因是在 showHelpOnFirstLaunch() 在CaptureActivity方法。它试图获取版本 com.google.zxing.client.android 包装,没有发现它,并抛出异常。它必须由赶上(PackageManager.NameNotFoundException E)被逮住{...} 。我不知道为什么异常未被捕获。

最新功能 通过GitURL安装自定义插件 PackageManager

您可以编辑 showHelpOnFirstLaunch()的方法,如除去包版本的检查或添加异常捕获如果你还没有在你的版本。

I am using zxing library, where I have built ZXing Android using Eclipse and included ZXing Android into my project and the poject manifest is

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="phoenix.metro.uis"
    android:versionCode="4"
    android:versionName="1.2" >

    <uses-sdk android:minSdkVersion="8" />

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:icon="@drawable/metro"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar" >
        <activity
            android:name="MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name="com.google.zxing.client.android.CaptureActivity"
            android:configChanges="orientation|keyboardHidden"
            android:screenOrientation="landscape"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
            android:windowSoftInputMode="stateAlwaysHidden" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter>
                <action android:name="com.google.zxing.client.android.SCAN" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity android:name=".PhoenixSplashActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="SearchActivity"
            android:multiprocess="false"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name="OffersActivity"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name=".CartsActivity"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name="GANDActivity"
            android:screenOrientation="portrait" >
        </activity>
        <activity
            android:name="MetroActivity"
            android:screenOrientation="portrait" >
        </activity>
        <activity android:name="AddItemActivity" >
        </activity>
        <activity
            android:name=".AboutUsActivity"
            android:screenOrientation="portrait" >
        </activity>
    </application>

</manifest>

but I get the exception :

10-01 23:00:29.227: W/CaptureActivity(539): android.content.pm.PackageManager$NameNotFoundException: com.google.zxing.client.android
10-01 23:00:29.227: W/CaptureActivity(539):     at android.app.ContextImpl$ApplicationPackageManager.getPackageInfo(ContextImpl.java:1682)
10-01 23:00:29.227: W/CaptureActivity(539):     at com.google.zxing.client.android.CaptureActivity.showHelpOnFirstLaunch(CaptureActivity.java:693)
10-01 23:00:29.227: W/CaptureActivity(539):     at com.google.zxing.client.android.CaptureActivity.onCreate(CaptureActivity.java:169)
10-01 23:00:29.227: W/CaptureActivity(539):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-01 23:00:29.227: W/CaptureActivity(539):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
10-01 23:00:29.227: W/CaptureActivity(539):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
10-01 23:00:29.227: W/CaptureActivity(539):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
10-01 23:00:29.227: W/CaptureActivity(539):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
10-01 23:00:29.227: W/CaptureActivity(539):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-01 23:00:29.227: W/CaptureActivity(539):     at android.os.Looper.loop(Looper.java:123)
10-01 23:00:29.227: W/CaptureActivity(539):     at android.app.ActivityThread.main(ActivityThread.java:3683)
10-01 23:00:29.227: W/CaptureActivity(539):     at java.lang.reflect.Method.invokeNative(Native Method)
10-01 23:00:29.227: W/CaptureActivity(539):     at java.lang.reflect.Method.invoke(Method.java:507)
10-01 23:00:29.227: W/CaptureActivity(539):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-01 23:00:29.227: W/CaptureActivity(539):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-01 23:00:29.227: W/CaptureActivity(539):     at dalvik.system.NativeStart.main(Native Method)

解决方案

Reason of the issue is in the showHelpOnFirstLaunch() method in CaptureActivity. It tries to get version of com.google.zxing.client.android package, doesn't find it and throws the exception. It must be catched by catch (PackageManager.NameNotFoundException e) { ... }. I don't know why exception is not catched.

You can edit showHelpOnFirstLaunch() method, e.g. remove the checking of package version or add exception catching if you haven't it in your version.