我正在尝试为Unity创建一个相机插件。有一些插件可用,但大多数都已过时并且不起作用。我无论如何都可以使用这些知识以备将来之需。最初我只是使用常规的Java类,但是为了拍照,我发现最好的方法是使用Intent,因为它被用于快速拍照而不是个性化相机应用程序。要使用Intent,必须使用Activity。该Activity被传递给Intent,但Activity还必须覆盖一种方法才能从Intent中接收结果,如Android文档所述。我想链接到它,但我只限于2个链接。
我正在使用这个来访问活动。AndroidJavaClass成功初始化,但是当我尝试获取上下文时,在logcat中出现了空指针错误。
C#代码
AndroidJavaClass link = new AndroidJavaClass("com.syncedsoftware.cameralink.CameraLinkActivity");
AndroidJavaObject activity = link.Call<AndroidJavaObject>("getLinkContext"); // jni null ptr!
activity.Call("TakePicture");
它从未达到 activity.Call("TakePicture");。
Java 类 -已更新为静态-
public class CameraLinkActivity extends UnityPlayerActivity {
private static Context cameraLinkContext;
public static Context getLinkContext(){
Log.v("Unityx", "GetLinkContext()");
return cameraLinkContext;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v("Unity", "OnCreate");
cameraLinkContext = this;
}
public void TakePicture(){
Log.v("Unity", "TakePicture()");
}
}
Logcat输出 -使用新的静态实现进行更新-
05-29 12:32:50.560 3408-3498/? V/Unityx﹕ GetLinkContext()
05-29 12:32:50.810 3408-3498/? I/Unity﹕ Exception: JNI: Init'd AndroidJavaObject with null ptr!
at UnityEngine.AndroidJavaObject..ctor (IntPtr jobject) [0x00000] in <filename unknown>:0
at UnityEngine.AndroidJavaObject.AndroidJavaObjectDeleteLocalRef (IntPtr jobject) [0x00000] in <filename unknown>:0
at UnityEngine.AndroidJavaObject._CallStatic[AndroidJavaObject] (System.String methodName, System.Object[] args) [0x00000] in <filename unknown>:0
at UnityEngine.AndroidJavaObject.CallStatic[AndroidJavaObject] (System.String methodName, System.Object[] args) [0x00000] in <filename unknown>:0
at AndroidCameraLink.Start () [0x00000] in <filename unknown>:0
我注意到的是,在onCreate()中的消息从未显示。这让我认为Activity没有被正确创建或根本没有被创建。Activity从未被“创建”,因此onCreate()也没有被调用来初始化Context字段。
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.syncedsoftware.cameralink" android:theme="@android:style/Theme.NoTitleBar" android:versionName="1.0" android:versionCode="1" android:installLocation="preferExternal">
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />
<application android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="false">
<activity android:name="com.unity3d.player.UnityPlayerNativeActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
</activity>
<activity android:name="com.syncedsoftware.cameralink.CameraLinkActivity" />
</application>
<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="18" />
<uses-feature android:glEsVersion="0x00020000" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
</manifest>
如果有人能解释一下为什么这不起作用,我会非常感激。我已经试图解决这个问题将近一周了,但是没有成功。这是我第一次进入Unity的本地领域,请原谅我的无知。
更新:getLinkContext()正在被调用,但问题仍然存在。
在将实现翻转为静态后,我发现我忽视了logcat消息。当将其翻转为静态时,getLinkContext()被成功调用,但是这并不能解决无法获取Activity实例的原始问题。
cameraLinkContext为空,因为onCreate()从未被调用。 Activity从未被“创建”。