Android:在库项目中访问camera.startPreview()

时间:2016-01-26 14:01:32

标签: android camera library-project

我是Android新手,但必须在项目上做一些相当复杂的编程。 我们想为Unity项目编写一个Android插件,因为我们需要测量用户的心率。代码本身已经编写并在应用程序的上下文中正常工作。我们现在必须在库项目的上下文中重写它。

我已经想过如何访问 getSystemService(),没有GUI元素(由于它是一个库而不是应用程序,我没有这个元素。)

现在的问题是,当我打电话给 camera.startPreview()时,没有任何反应。我试着做以下事情:

public HeartRateMeasurement(Context c) {
    context = c;

    SurfaceView surfaceView = new SurfaceView(c);
    SurfaceHolder holder = surfaceView.getHolder();
    holder.addCallback(this);
    surfaceCreated(holder);

}

在surfaceCreated中我设置了一些参数(比如flash模式“torch”),然后调用

camera.setPreviewDisplay(holder);
camera = open();

当心率测量应该开始时(按钮点击发生)

camera.startPreview();

这一切(除了我自己添加的构造函数)在应用程序内部完成时起作用,但不在库内 - 没有异常抛出,但闪存只是没有打开。在调试信息中,他告诉我“D / Camera:app传递了NULL表面”,这并不奇怪,因为没有布局/表面。

My Manifest看起来像这样:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="tudarmstadt.heartrateplugin">
<application
    android:allowBackup="true"
    android:label="@string/app_name"
    android:supportsRtl="true"></application>
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera.flash" />
<uses-feature android:name="android.hardware.Sensor" />
</manifest>

有什么方法可以让 startPreview()工作?

1 个答案:

答案 0 :(得分:1)

将曲面附加到主布局。

rootlayout.addView(surfaceView)

最新的API阻止程序员在不显示数据的情况下获取数据。

修改 为了获得根布局,你必须使用它:

mRootWindow = getWindow();
mDecorView = mRootWindow.getDecorView();
mRootView = mDecorView.findViewById(android.R.id.content);