OpenCV Service Intent必须是显式的,Android 5.0 Lollipop

我正在为使用OpenCV的学士学位文凭构建此应用程序。 一切都很顺利,直到我将手机的Android更新到5.0。

更新后,我的项目停止工作,因为:

java.lang.IllegalArgumentException:Service Intent必须是显式的:Intent {act = org.opencv.engine.BIND}

我已阅读并告知自己有关Android 5.0中隐式意图的新限制,但我如何解决这个问题以使OpenCV工作?

我可以修改OpenCV SDK中的AsyncServiceHelper.java文件以尝试修复此问题,但是为了使用显式意图,我怎样才能获得需要运行的OpenCV服务的Class对象?

或者这种方法可能是死路一条,但有没有其他方法,或者我唯一的选择是更新OpenCV SDK,还是降级我的设备上的Android版本?

Related of "OpenCV Service Intent必须是显式的,Android 5.0 Lollipop"

我认为更改android:targetSdkVersion不是很长时间的解决方案;)所以我添加了包名称以使intent明确:

public static boolean initOpenCV(String Version, final Context AppContext, final LoaderCallbackInterface Callback) { AsyncServiceHelper helper = new AsyncServiceHelper(Version, AppContext, Callback); Intent intent = new Intent("org.opencv.engine.BIND"); intent.setPackage("org.opencv.engine"); if (AppContext.bindService(intent, helper.mServiceConnection, Context.BIND_AUTO_CREATE)) { return true; } else { AppContext.unbindService(helper.mServiceConnection); InstallService(AppContext, Callback); return false; } } 

也许有人可以告诉opencv comitter这个,推动修补程序。

编辑:从下面的评论:对于其他人想知道这个函数的位置,它在src / main / java / org / opencv / android / AsyncServiceHelper.java

我在工作时看到了答案,测试了它并解决了这个问题。 显然它同时被删除了。 再次发布以供参考

解决方案正在改变:AndroidManifest.xml中的android:targetSdkVersion2119 。 简直不敢相信这很容易,我失去了一天试图解决它,买嘿,再次感谢发布初步答案的人:)

谢谢stackoverflow!

我已将OpenCV版本更改为3.0,问题解决了:

 OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallbck); 

 OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallbck); 

为了在任何版本的Android即最新版本运行应用程序。

删除标签 – android:targetSdkVersion