【发布时间】:2013-07-12 10:31:12
【问题描述】:
我创建了一个 FragmentActivity (VideoFragActivity),其中包含一个 VideoView。除此之外,我将 FDActivity 从 OpenCV FaceDetection 示例代码更改为 Fragment (FDFragment),并尝试在 VideoFragActivity 期间运行它。
我在 StackOverflow 上寻找帮助时偶然发现了以下链接: OpenCV's native camera in Android prevents video player from working 但没有得到答复
我的问题是,真的有可能在 Android 上让相机(在片段中启动)在片段活动期间运行吗?在我的情况下,是否可以让 VideoFragActivity 和 FDFragment 工作,以便运行 opencv 人脸检测示例时会播放视频吗?
编辑
当我将 FDFragment 的高度和宽度的 XML 更改为 wrap_content、fill_parent 或 match_parent 时,我的应用不会尝试打开相机
但是,当我将高度和宽度更改为随机值(如 50sp 或 100sp)时,它会尝试打开相机(调用 onCameraViewStarted()),但会出现错误:
“您的设备似乎不支持摄像头(或被锁定)。应用程序将被关闭”
我检查了清单中的权限是否正确放置,并且相机没有被其他应用程序使用。有没有人知道如何解决这个问题?
这是来自 FDFragment 的代码(如果我将 OpenCV Activity 示例代码错误地更改为片段,请告诉我):
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
Log.i(TAG, "called onCreate");
super.onCreateView(inflater, container,savedInstanceState);
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
View view= inflater.inflate(R.layout.face_detect_surface_view, container, false);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
mOpenCvCameraView = (CameraBridgeViewBase) getView().findViewById(R.id.fd_activity_surface_view);
mOpenCvCameraView.setCvCameraViewListener(this);
}
...
public void onCameraViewStarted(int width, int height) {
mGray = new Mat();
mRgba = new Mat();
}
我在清单中添加的权限:
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
<uses-feature
android:name="android.hardware.camera.autofocus"
android:required="false" />
<uses-feature
android:name="android.hardware.camera.front"
android:required="false" />
<uses-feature
android:name="android.hardware.camera.front.autofocus"
android:required="false" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application (...etc)
非常感谢任何帮助!
【问题讨论】:
标签: android opencv android-fragments android-camera android-videoview