我有一段时间试图让opencv与Android Studio合作。我已经按照所有明显的教程,但无法使opencv版本2.4.11示例代码完全正常工作。
应用程序编译,但在尝试运行时,我只是在手机上收到错误消息:
Unfortunately OCV T3 Camera Control has stopped.
和logcat:
05-02 00:23:37.876 18962-18962/org.opencv.samples.tutorial3 E/AndroidRuntime: FATAL EXCEPTION: main
Process: org.opencv.samples.tutorial3, PID: 18962
java.lang.RuntimeException: Unable to resume activity {org.opencv.samples.tutorial3/org.opencv.samples.tutorial3.Tutorial3Activity}: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=org.opencv.engine.BIND }
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3103)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3134)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2481)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=org.opencv.engine.BIND }
at android.app.ContextImpl.validateServiceIntent(ContextImpl.java:1209)
at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1308)
at android.app.ContextImpl.bindService(ContextImpl.java:1286)
at android.content.ContextWrapper.bindService(ContextWrapper.java:604)
at org.opencv.android.AsyncServiceHelper.initOpenCV(AsyncServiceHelper.java:24)
at org.opencv.android.OpenCVLoader.initAsync(OpenCVLoader.java:89)
at org.opencv.samples.tutorial3.Tutorial3Activity.onResume(Tutorial3Activity.java:91)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1258)
at android.app.Activity.performResume(Activity.java:6327)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3092)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3134)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2481)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
我正在尝试使用最新的Android Studio版本2.1和Android版本6.0,即SDK版本23,但我不关心早期版本是否足够。我看过帖子说可能尝试使用这些更高版本是愚蠢的,也许我应该使用SDK版本21或19?
我已尝试修改build.gradle文件以使用
minSdkVersion 19
targetSdkVersion 21
这似乎没有任何改变。
请帮忙。
答案 0 :(得分:0)
好的,我找到了基本答案,现在允许样本实际运行,尽管它们仍有其他问题中描述的缺陷。
核心答案是你必须设置:
minSdkVersion 19
targetSdkVersion 19
在build.gradle文件中。
原因显然是Android" Intents"在Android版本19之后指定从相对更改为绝对,并且opencv尚未更新以处理此问题。我首先通过这个关于answers.opencv.org的晦涩参考找到了这个(显然已经不复存在了 - opencv发生了什么?):
您必须在包含此targetSdkVersion指令的每个build.gradle文件中修复此问题,包括在opencv库目录和每个示例目录中。
我问的样本仍然只能在横向模式而不是纵向模式下工作:
How to force an Android camera to display in portrait mode with opencv?
在示例应用程序等中显示菜单还有更多问题。
opencv和Android到底发生了什么? Android sdk版本19(Android 4.4.2)至少有一年(或两三个)或更旧版本,而opencv的这个(近似)版本已存在大概一年或更长时间。随配送提供的样品甚至不能开箱即用?有人还在为Android维护opencv吗?
(对不起评论,请不要回复意见,只要你知道什么时候会在标准发行版中修复这些内容。)