我一直試圖從Unity訪問一個活動方法,無法弄清楚爲什麼它不工作的生活。我已閱讀各種頁面,如http://forum.unity3d.com/threads/call-a-method-in-an-activity-using-androidjavaobject.219950/和http://docs.unity3d.com/460/Documentation/Manual/PluginsForAndroid.html無法獲得統一C中的活動實例#
我正在嘗試爲Unity創建一個Camera插件。那裏有一些插件,但大多數都過時了,不起作用。無論如何,我都可以使用這些知識以備將來使用。我最初只是使用普通的Java課程,但爲了拍攝照片,我發現最好的方法是使用Intent,因爲它用於快速照片,而不是個性化的照相機應用程序。要使用意圖,必須使用活動。 Activity被傳遞給Intent,但Activity還必須重寫一個方法,以從Android文檔中概述的Intent接收結果。我會鏈接到它,但我只限於2個鏈接。
我正在使用它來訪問活動。 AndroidJavaClass初始化成功,但是,當我嘗試獲取上下文時,logcat中出現空ptr錯誤。
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類STATICS- - 更新與新的靜態IMPLEMENTATION-
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()消息 - 更新
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的輸出。這導致我相信該活動沒有被正確創建或創建。
活動從未被「創建」,因此onCreate()永遠不會被調用來初始化上下文字段。
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,請原諒我的無知。
UPDATE:正在調用getLinkContext(),但問題仍然存在。
將實現翻轉爲靜態後,我發現我忽略了logcat消息。將它翻轉爲靜態時,getLinkContext()被成功調用,但是,這並不能解決無法獲取Activity實例的原始問題。
cameraLinkContext爲null,因爲onCreate()永遠不會被調用。該活動從未被「創造」。
請使用unity3d標籤。 –
自從我使用任何擴展UnityPlayerNativeActivity的活動(我們很久以前轉換爲完全不同的插件創建方法)以來,已經有一段時間了,所以我不是100%確定的,但我相信這個問題可能在於事實上您的自定義Activity(com.syncedsoftware .....)未在Manifest中標記爲MainActivity。基本上,用清單中的活動名稱替換「com.unity3d.player.UnityPlayerNativeActivity」。 –
@VenkatatAxiomStudios做完這些之後,應用程序甚至不會啓動。我得到一個說「應用程序未安裝」的敬酒信息。 –