我正在尝试使用 OpenCV 访问 android 相机。我成功创建了一个项目,它运行没有任何问题。我尝试使用来自互联网的代码并在我的项目中检查它。但是,应用程序停止了。这似乎是一个 RuntimeException 问题,但我不知道如何解决它。这是我的代码,我从这个网站http://people.oregonstate.edu/~robinsti/CS_496/Tutorial/复制的:
mainActivity.java
public class MainActivity extends AppCompatActivity implements View.OnTouchListener, CameraBridgeViewBase.CvCameraViewListener2{
private CameraBridgeViewBase mOpenCvCameraView;
private Mat mRgba;
@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
setContentView(R.layout.activity_main);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.Surface);
mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
//mOpenCvCameraView.setMaxFrameSize(176, 152);
mOpenCvCameraView.setCvCameraViewListener(this);
}
private BaseLoaderCallback mLoaderCallBack = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
super.onManagerConnected(status);
switch (status) {
case LoaderCallbackInterface.SUCCESS: {
mOpenCvCameraView.enableView();
mOpenCvCameraView.setOnTouchListener(MainActivity.this);
} break;
default: {
super.onManagerConnected(status);
} break;
}
}
};
@Override
public void onPause() {
super.onPause();
if(mOpenCvCameraView != null) {
mOpenCvCameraView.disableView();
}
}
@Override
public void onResume() {
super.onResume();
if(mOpenCvCameraView != null) {
mOpenCvCameraView.disableView();
}
}
@Override
public void onDestroy() {
super.onDestroy();
if(!OpenCVLoader.initDebug()) {
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_1_0,this, mLoaderCallBack);
}
else {
mLoaderCallBack.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
}
@Override
public void onCameraViewStarted(int width, int height) {
}
@Override
public void onCameraViewStopped() {
}
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
mRgba = inputFrame.rgba();
return mRgba;
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return false;
}
}
活动主.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
xmlns:opencv="http://schemas.android.com/apk/res-auto"
tools:context="com.tech.te.smartrotate.MainActivity">
<org.opencv.android.JavaCameraView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/Surface" />
</RelativeLayout>
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package=" ">
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>
<uses-feature android:name="android.hardware.camera.front"/>
<uses-feature android:name="android.hardware.camera.front.autofocus"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"> <!--android:theme="@style/AppTheme">-->
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
日志猫:
07-29 15:54:44.066 31188-31188/com.tech.te.app W/art: 未能找到 DexFile /data/data/com.tech.te.app/files/instant-run/dex/ 的 OatDexFile slice-slice_2-classes.dex(规范路径 /data/data/com.tech.te.app/files/instant-run/dex/slice-slice_2-classes.dex)在 OatFile /data/data/com 中具有校验和 0x7f90e189 .tech.te.app/cache/slice-slice_2-classes.dex 07-29 15:54:45.836 31188-31195/com.tech.te.app W/艺术:暂停所有线程耗时:19.602ms 07-29 15:54:45.946 31188-31188/com.tech.te.app D/DisplayManager: DisplayManager() 07-29 15:54:46.376 31188-31188/com.tech.te.app W/art: 在 Android 4.1 之前,方法 android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter , android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) 会错误地覆盖 android.graphics.drawable.Drawable 中的包私有方法 07-29 15:54:46.596 31188-31188/com.tech.te.app E/VdcInflateDelegate:充气时出现异常 java.lang.RuntimeException:无法解析索引 1 处的属性 在 android.content.res.TypedArray.twGetColorStateList(TypedArray.java:437) 在 android.content.res.TypedArray.getColorStateList(TypedArray.java:419) 在 android.support.graphics.drawable.VectorDrawableCompat.updateStateFromTypedArray(VectorDrawableCompat.java:518) 在 android.support.graphics.drawable.VectorDrawableCompat.inflate(VectorDrawableCompat.java:472) 在 android.support.graphics.drawable.VectorDrawableCompat.createFromXmlInner(VectorDrawableCompat.java:436) 在 android.support.v7.widget.AppCompatDrawableManager$VdcInflateDelegate.createFromXmlInner(AppCompatDrawableManager.java:708) 在 android.support.v7.widget.AppCompatDrawableManager.loadDrawableFromDelegates(AppCompatDrawableManager.java:348) 在 android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:188) 在 android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:181) 在 android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup(AppCompatDrawableManager.java:689) 在 android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:186) 在 android.support.v7.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:77) 在 android.support.v7.app.AppCompatDelegateImplBase.(AppCompatDelegateImplBase.java:83) 在 android.support.v7.app.AppCompatDelegateImplV7.(AppCompatDelegateImplV7.java:146) 在 android.support.v7.app.AppCompatDelegateImplV11.(AppCompatDelegateImplV11.java:28) 在 android.support.v7.app.AppCompatDelegateImplV14.(AppCompatDelegateImplV14.java:41) 在 android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:193) 在 android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:173) 在 android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:511) 在 android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:71) 在 android.app.Activity.performCreate(Activity.java:6112) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1117) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2609) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2721) 在 android.app.ActivityThread.access$900(ActivityThread.java:168) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5753) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 07-29 15:54:46.596 31188-31202/com.tech.te.app I/art: 后台粘性并发标记扫描 GC 释放 6652(1091KB) AllocSpace objects, 1(20KB) LOS objects, 14% free, 5MB/ 6MB,暂停 36.125ms 共 277.107ms 07-29 15:54:46.616 31188-31202/com.tech.te.app I/art:后台粘性并发标记扫描 GC 释放 274(43KB) AllocSpace 对象,0(0B) LOS 对象,14% 空闲,5MB/ 6MB,暂停 7.366ms 共 16.707ms 07-29 15:54:46.706 31188-31188/com.tech.te.app D/AndroidRuntime: 关闭虚拟机 07-29 15:54:46.716 31188-31188/com.tech.te.app E/AndroidRuntime: 致命异常: main 进程:com.tech.te.app,PID:31188 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.tech.te.app/com.tech.te.app.MainActivity}:java.lang.IllegalStateException:您需要使用 Theme.AppCompat 主题(或后代)有了这个活动。 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2656) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2721) 在 android.app.ActivityThread.access$900(ActivityThread.java:168) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5753) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 引起:java.lang.IllegalStateException:您需要在此活动中使用 Theme.AppCompat 主题(或后代)。 在 android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.java:343) 在 android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:312) 在 android.support.v7.app.AppCompatDelegateImplV7.onPostCreate(AppCompatDelegateImplV7.java:167) 在 android.support.v7.app.AppCompatActivity.onPostCreate(AppCompatActivity.java:98) 在 android.app.Instrumentation.callActivityOnPostCreate(Instrumentation.java:1198) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2638) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2721) 在 android.app.ActivityThread.access$900(ActivityThread.java:168) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5753) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 07-29 15:54:50.366 31188-31188/com.tech.te.app I/Process:发送信号。PID:31188 SIG:9
非常感谢。