Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=org.opencv.engine.BIND } #2

Closed
SOFTPOWER1991 opened this issue Jan 17, 2017 · 3 comments

Comments

@SOFTPOWER1991
Copy link

我在运行这个demo的时候报如下错误:

01-17 14:45:15.439 29184-29184/kong.qingwei.kqwfacedetectiondemo E/AndroidRuntime: FATAL EXCEPTION: main
Process: kong.qingwei.kqwfacedetectiondemo, PID: 29184
java.lang.RuntimeException: Unable to start activity ComponentInfo{kong.qingwei.kqwfacedetectiondemo/kong.qingwei.kqwfacedetectiondemo.MainActivity}: android.view.InflateException: Binary XML file line #45: Error inflating class kong.qingwei.kqwfacedetectiondemo.CameraFaceDetectionView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2664)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2733)
at android.app.ActivityThread.access$900(ActivityThread.java:187)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1584)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5869)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1019)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:814)
Caused by: android.view.InflateException: Binary XML file line #45: Error inflating class kong.qingwei.kqwfacedetectiondemo.CameraFaceDetectionView
at android.view.LayoutInflater.createView(LayoutInflater.java:639)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:749)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:812)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:815)
at android.view.LayoutInflater.inflate(LayoutInflater.java:510)
at android.view.LayoutInflater.inflate(LayoutInflater.java:420)
at android.view.LayoutInflater.inflate(LayoutInflater.java:371)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:437)
at android.app.Activity.setContentView(Activity.java:2205)
at kong.qingwei.kqwfacedetectiondemo.MainActivity.onCreate(MainActivity.java:36)
at android.app.Activity.performCreate(Activity.java:6127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2617)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2733) 
at android.app.ActivityThread.access$900(ActivityThread.java:187) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1584) 
at android.os.Handler.dispatchMessage(Handler.java:111) 
at android.os.Looper.loop(Looper.java:194) 
at android.app.ActivityThread.main(ActivityThread.java:5869) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1019) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:814) 
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.view.LayoutInflater.createView(LayoutInflater.java:613)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:749) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:812) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:815) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:510) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:420) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:371) 
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:437) 
at android.app.Activity.setContentView(Activity.java:2205) 
at kong.qingwei.kqwfacedetectiondemo.MainActivity.onCreate(MainActivity.java:36) 
at android.app.Activity.performCreate(Activity.java:6127) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2617) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2733) 
at android.app.ActivityThread.access$900(ActivityThread.java:187) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1584) 
at android.os.Handler.dispatchMessage(Handler.java:111) 
at android.os.Looper.loop(Looper.java:194) 
at android.app.ActivityThread.main(ActivityThread.java:5869) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1019) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:814) 
Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=org.opencv.engine.BIND }
at android.app.ContextImpl.validateServiceIntent(ContextImpl.java:1851)
at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1951)
at android.app.ContextImpl.bindService(ContextImpl.java:1929)
at android.content.ContextWrapper.bindService(ContextWrapper.java:539)
at org.opencv.android.AsyncServiceHelper.initOpenCV(AsyncServiceHelper.java:24)
at org.opencv.android.OpenCVLoader.initAsync(OpenCVLoader.java:89)
at kong.qingwei.kqwfacedetectiondemo.CameraFaceDetectionView.loadOpenCV(CameraFaceDetectionView.java:53)
at kong.qingwei.kqwfacedetectiondemo.CameraFaceDetectionView.(CameraFaceDetectionView.java:46)
at java.lang.reflect.Constructor.newInstance(Native Method) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
at android.view.LayoutInflater.createView(LayoutInflater.java:613) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:749) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:812) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:815) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:510) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:420) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:371) 
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:437) 
at android.app.Activity.setContentView(Activity.java:2205) 
at kong.qingwei.kqwfacedetectiondemo.MainActivity.onCreate(MainActivity.java:36) 
at android.app.Activity.performCreate(Activity.java:6127) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2617) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2733) 
at android.app.ActivityThread.access$900(ActivityThread.java:187) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1584) 
at android.os.Handler.dispatchMessage(Handler.java:111) 
at android.os.Looper.loop(Looper.java:194) 
at android.app.ActivityThread.main(ActivityThread.java:5869) 
at java.lang.reflect.Method.invoke(Native Method) 

编译版本build.gradle:

android {
compileSdkVersion 25
buildToolsVersion "25.0.0"

defaultConfig {
    applicationId "kong.qingwei.kqwfacedetectiondemo"
    minSdkVersion 15
    targetSdkVersion 25
    versionCode 1
    versionName "1.0"

    ndk {
        // 设置支持的 SO 库构架
        abiFilters 'armeabi-v7a'// 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64'
    }
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

}

@kongqw
Copy link
Owner

kongqw commented Jan 17, 2017

Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=org.opencv.engine.BIND }

@SOFTPOWER1991
Android 5.0 以后要显示启动服务。
你把targetSdkVersion改成 19,或者改下服务启动方式再试试

@SOFTPOWER1991
Copy link
Author

@kongqw 我搞定了!这样解决的:

在 CameraFaceDetectionView 中的loadOpenCV 中把loadOpenCV方法改成下面这样就跑起来了:

`
private void loadOpenCV(Context context) {
// 初始化OpenCV
// boolean b = OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_5, context, mLoaderCallback);
// Log.i(TAG, "loadOpenCV: b = " + b);

    if (OpenCVLoader.initDebug()){
        mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
    }
}`

貌似没发现有启动服务的地方吧?看源码跟服务有关的地方AsyncServiceHelper中的:
public static boolean initOpenCV(String Version, final Context AppContext, final LoaderCallbackInterface Callback) { AsyncServiceHelper helper = new AsyncServiceHelper(Version, AppContext, Callback); if (AppContext.bindService(new Intent("org.opencv.engine.BIND"), helper.mServiceConnection, Context.BIND_AUTO_CREATE)) { return true; } else { AppContext.unbindService(helper.mServiceConnection); InstallService(AppContext, Callback); return false; } }

这块儿咱们不用改吧?

@kongqw
Copy link
Owner

kongqw commented Jan 17, 2017

@SOFTPOWER1991
解决了就好!过去太久,封装完了以后也没有再看,有些记不清了,我记得源码里是有启动服务了,我还改过。

@kongqw kongqw closed this as completed Jan 19, 2017
kongqw pushed a commit that referenced this issue Feb 21, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants