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

时间:2014-12-14 14:29:23

标签: android opencv android-intent opencv4android

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

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

  

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

我已阅读并告知自己有关Android 5.0中隐式意图的新限制,但我怎样才能解决这个问题,以便OpenCV能够正常工作?

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

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

4 个答案:

答案 0 :(得分:48)

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

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 /中机器人/ AsyncServiceHelper.java

答案 1 :(得分:7)

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

解决方案正在改变:AndroidManifest.xml中的 android:targetSdkVersion ,从 21 19 。不能相信这很容易,我失去了一天试图找出来,买嘿,再次感谢那个发布最初答案的人:)

感谢stackoverflow!

答案 2 :(得分:0)

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

发件人

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

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

答案 3 :(得分:-5)

为了在任何版本的android(即最新版本)上运行应用程序。

删除代码 - android:targetSdkVersion