我是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()工作?
答案 0 :(得分:1)
将曲面附加到主布局。
即rootlayout.addView(surfaceView)
最新的API阻止程序员在不显示数据的情况下获取数据。
修改强> 为了获得根布局,你必须使用它:
mRootWindow = getWindow();
mDecorView = mRootWindow.getDecorView();
mRootView = mDecorView.findViewById(android.R.id.content);