gpt4 book ai didi

android - 使用 Zxing 条码扫描器导致 SecurityException

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:33:29 33 4
gpt4 key购买 nike

我通过启动 Intent 在我的应用程序中使用 Zxing Barcode Scanner,这样我就可以扫描条形码并将数据返回到我的应用程序。非常基本的东西;它已经工作了很长时间没问题。我最近通过 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 之外,没有发生任何重要的事情。我唯一的猜测是我们的两个应用程序都发生了某种冲突,一次只有一个人可以使用 Barcode Scanner 包,从而导致 SecurityException。但这对我来说没有多大意义,因为我可以毫无问题地做到这一点,而且我想很多人都安装了多个使用 Zxing 的应用程序,没有任何问题。

有没有人知道导致此错误的原因以及我可以采取什么措施来解决它?

编辑:根据 SeanOwen 的评论,如果您在使用 Barcode Scanner 时遇到这个问题,请务必使用 IntentIntegrator。它们提供了一个内置方法 setTargetApplications。您可以使用它来使 Intent 仅使用实际的条码扫描器应用程序:setTargetApplications(IntentIntegrator.TARGET_BARCODE_SCANNER_ONLY); 简单易行。

最佳答案

UPS Mobile 没有链接到 Barcode Scanner 应用程序,但显然已经嵌入了它的源代码。这并不令人震惊,即使 ZXing 团队不支持也不推荐它。

但是,UPS Mobile 开发人员随后做了两件事:

  1. 他们保持不变 <intent-filter> ,特别是在他们宣传他们正在处理 com.google.zxing.client.android.SCAN 的地方行动,尽管他们实际上并不是那个应用程序

  2. 他们将 Activity 标记为未导出

this bug 提供, 选择器仍然会显示他们的 Activity ,尽管他们的 Activity 没有导出,因此无法启动。

UPS Mobile 要么按照您的方式链接到 Barcode Scanner,要么不宣传此操作。当然,这个错误应该得到修复。

不幸的是,我能想到的唯一解决方法是让您添加 Intent条形码扫描器的实际包名称 ( com.google.zxing.client.android ) 以尝试将其限制为仅该应用程序。

这让人想起 another SO question ,导致a blog post of mine ,这显然不足以教育 UPS,所以我可能会再次写博客......

关于android - 使用 Zxing 条码扫描器导致 SecurityException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11388450/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com