Android: 在库项目中访问 camera.startPreview()
Android: Accessing camera.startPreview() in library project
我是 Android 的新手,但必须对项目进行一些相当复杂的编程。
我们想为 Unity 项目编写一个 Android 插件,因为我们需要测量用户的心率。代码本身已经编写完成,并且可以在应用程序的上下文中正常运行。我们现在必须在库项目的上下文中重写它。
我已经想出了如何在没有 GUI 元素的情况下访问 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 内部我设置了一些参数(比如闪光模式 "torch")然后调用
camera.setPreviewDisplay(holder);
camera = open();
以及何时应该开始测量心率(发生在单击按钮时)
camera.startPreview();
这一切(除了我自己添加的构造函数之外)在应用程序内部完成时就像魅力一样工作,但不是在库中 - 没有抛出异常,但闪光灯没有打开。在调试信息中他告诉我 "D/Camera: app passed NULL surface",这并不奇怪,因为没有 layout/surface.
我的清单如下所示:
<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() 正常工作?
将图面附加到主布局。
即rootlayout.addView(surfaceView)
最新的API防止程序员在不显示的情况下抓取数据。
编辑
为了获得根布局,你必须使用这个:
mRootWindow = getWindow();
mDecorView = mRootWindow.getDecorView();
mRootView = mDecorView.findViewById(android.R.id.content);
我是 Android 的新手,但必须对项目进行一些相当复杂的编程。 我们想为 Unity 项目编写一个 Android 插件,因为我们需要测量用户的心率。代码本身已经编写完成,并且可以在应用程序的上下文中正常运行。我们现在必须在库项目的上下文中重写它。
我已经想出了如何在没有 GUI 元素的情况下访问 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 内部我设置了一些参数(比如闪光模式 "torch")然后调用
camera.setPreviewDisplay(holder);
camera = open();
以及何时应该开始测量心率(发生在单击按钮时)
camera.startPreview();
这一切(除了我自己添加的构造函数之外)在应用程序内部完成时就像魅力一样工作,但不是在库中 - 没有抛出异常,但闪光灯没有打开。在调试信息中他告诉我 "D/Camera: app passed NULL surface",这并不奇怪,因为没有 layout/surface.
我的清单如下所示:
<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() 正常工作?
将图面附加到主布局。
即rootlayout.addView(surfaceView)
最新的API防止程序员在不显示的情况下抓取数据。
编辑 为了获得根布局,你必须使用这个:
mRootWindow = getWindow();
mDecorView = mRootWindow.getDecorView();
mRootView = mDecorView.findViewById(android.R.id.content);