6

アプリで Zxing Barcode Scanner を起動して使用しIntent、バーコードをスキャンしてデータをアプリに戻すことができます。非常に基本的なもの。問題なく長時間動作しています。私は最近、次のスタック トレースを含むエラー レポートを Play から受け取りました。

    java.lang.SecurityException: Permission Denial: starting Intent 
{ act=com.google.zxing.client.android.SCAN cmp=com.ups.mobile.android/com.google.zxing.client.android.CaptureActivity } 
from ProcessRecord{421bafc8 11687:edu.byu.dburner.lendablefree/10141} 
(pid=11687, uid=10141) not exported from uid 10137
    at android.os.Parcel.readException(Parcel.java:1327)
    at android.os.Parcel.readException(Parcel.java:1281)
    at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1736)
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1383)
    at android.app.Activity.startActivityForResult(Activity.java:3281)
    at edu.byu.dburner.lendable.xxxxx.xxxx$2.onClick(xxxxxx.java:539)
    at android.view.View.performClick(View.java:3644)
    at android.view.View$PerformClick.run(View.java:14313)
    at android.os.Handler.handleCallback(Handler.java:605)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4514)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
    at dalvik.system.NativeStart.main(Native Method)

スタック トレースでわかる限りcom.ups.mobile.android、Zxing アプリも利用する UPS アプリに問題があります。UPS アプリと私のものを同じ電話にインストールしてonClick、問題が発生したイベントをトリガーしてみました。バーコード スキャン アプリまたは UPS アプリを選択してIntent. 私の唯一の推測では、両方のアプリで、一度に 1 人のユーザーしかバーコード スキャナー パッケージを使用できないという何らかの衝突が発生し、その結果、SecurityException が発生したと考えられます。しかし、問題なく実行できるので、それはあまり意味がありません。多くの人が、Zxing を使用する複数のアプリを問題なくインストールしていると思います。

このエラーの原因とそれを修正するために何ができるかについての洞察を誰かが持っていますか?

編集: SeanOwen のコメントによると、特にバーコード スキャナーでこの問題が発生した場合は、実際に を使用してくださいIntentIntegrator。これらは組み込みメソッドを提供しsetTargetApplicationsます。これをIntent使用して、実際のバーコード スキャナー アプリのみを使用することができますsetTargetApplications(IntentIntegrator.TARGET_BARCODE_SCANNER_ONLY);。パイのように簡単です。

4

1 に答える 1

7

UPS Mobile はバーコード スキャナー アプリにリンクしていませんが、ソース コードを焼き付けているようです。これは、ZXing チームによってサポートされておらず、推奨されていない場合でも、それほど衝撃的ではありません。

ただし、UPS Mobile の開発者は次の 2 つのことを行いました。

  1. 彼らは、実際にはそのアプリではないという事実にもかかわらず<intent-filter>、特に彼らがアクションを処理していることを宣伝している場所で、同じままでしたcom.google.zxing.client.android.SCAN

  2. 彼らはアクティビティをエクスポートされていないとマークしました

このバグのおかげで、セレクターはエクスポートされていないため起動できないにもかかわらず、アクティビティを表示します。

UPS Mobile は、そのままの方法でバーコード スキャナーにリンクするか、このアクションを宣伝しないかのいずれかです。もちろん、このバグは修正されるはずです。

残念ながら、私が考えることができる唯一の回避策はIntent、バーコード スキャナー ( com.google.zxing.client.android) の実際のパッケージ名を追加して、そのアプリのみに限定することです。

これは、私のブログ投稿につながった別の SOの質問を思い起こさせますが、UPS を教育するには明らかに不十分だったので、おそらくこれについて再度ブログを書くことにします...

于 2012-07-09T11:31:58.133 に答える