我在我的应用程序中通过启动Intent
来使用Zxing条形码扫描器,以便扫描条形码并将数据传回我的应用程序。非常基础的东西,长期以来都没有问题。最近我通过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
仅使用实际的Barcode Scanner应用程序:setTargetApplications(IntentIntegrator.TARGET_BARCODE_SCANNER_ONLY);
像吃馅饼一样简单。