2016-01-26 3 views
2

Я новичок в Android, но мне нужно сделать довольно сложное программирование в проекте. Мы хотим написать Android-модуль для Unity Project, потому что нам нужно измерить сердечный ритм пользователя. Сам код уже написан и отлично работает в контексте приложения. Теперь мы должны переписать его в контексте проекта библиотеки.Android: Доступ к функции camera.startPreview() в библиотечном проекте

Я уже понял, как получить доступ к 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 я установить некоторые параметры (например, флэш-режим «факел»), а затем называют

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

и когда HeartRate-измерение должно начинаться (бывает на кнопку мыши)

camera.startPreview(); 

Это все (кроме конструктора-материала, который я добавил) работает как шарм, когда делается внутри приложения, но не в библиотеке - нет отл eption, но вспышка просто не включается. В отладочной информации он говорит мне, что «D/Camera: приложение прошло NULL-поверхность», что неудивительно, поскольку нет макета/поверхности.

Мой манифеста выглядит следующим образом:

<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

Прикрепите поверхность к основному макету.

То есть, rootlayout.addView(surfaceView)

последнего API предотвратить программист, чтобы захватить данные, не показывая их.

редактировать для того, чтобы получить расположение корневой вы должны использовать это:

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

Как это было сделано в работе [здесь] (http://stackoverflow.com/questions/11450048/what-is- root-layout-in-xml)? Возможно ли это из Unity? Я создал очень простое приложение для Android, чтобы проверить это, но позже оно должно использоваться только из Unity. Потому что «не показывающая» часть - это точно моя проблема. Я просто хочу данные камеры, а затем Unity использует это. – Isabella

+0

@ Изабелла, что-то вроде. читайте здесь. http://www.41post.com/5292/programming/unity-and-android-create-an-unity-app-with-a-custom-layout добавить ссылку на поверхность вместо кнопок в ссылке. – Vyacheslav

+0

Спасибо. Я попробую и проверю, работает ли это. – Isabella

Смежные вопросы