Unity(C#)からAndroid(Java)のActivityを拡張したクラスにアクセスしたい
Androidで javaクラスの
package com.xxx;
public class hoge{
public hoge(){}
メソッド...
}
のメソッドにアクセスするときは、
Plugins>Androidフォルダにそのjarを置いて
C#から
AndroidJavaObject Instatnce = new AndroidJavaObject("com.xxx");
var fuga = Instatnce.Call<戻り値>("メソッド名");
などでいけるのですが、
この方法だと以下の継承されたクラスにアクセスできません。
package com.xxx;
import android.support.v7.app.ActionBarActivity;
public class hoge extends ActionBarActivity{
public hoge(){}
メソッド...
}
これは、上記のC#でアクセスすると
java.lang.ClassNotFoundException エラーになってしまいます。
初歩的な質問かもしれませんがご指導お願いします。
↓
AndroidのActivityという概念をまるで理解してなかったのですが、
おかげで2つの方法でメソッドを呼べました。
java
 package com.xxx;
import com.unity3d.player.UnityPlayerActivity;
import com.unity3d.player.UnityPlayer;
public class Hoge extends UnityPlayerActivity {
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    UnityPlayer.UnitySendMessage("Main Camera", "Hoge", "HOGEHOGE");
  }
  public String Fuga(){
      return "FUGAFUGA";
  }
}
このままだとエラーなので、Macでの
  /Applications/Unity/Unity.app/Contents/PlaybackEngines/classes.jar
を追加して、jar化。
Plugins>Androidフォルダにそのjarを置いて
AndroidManifest.xml で UnityPlayerActivity を拡張したHogeに変更。
    <activity android:name="Hoge"
              android:label="@string/app_name">
Main Camera オブジェクトに追加したC#コンポーネント
using UnityEngine;
using System.Collections;
public class test : MonoBehaviour
{
    void Start ()
    {
        // Unity インスタンスを取得
        AndroidJavaClass unityPlayer = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
        // 現在のアクティビティを取得
        AndroidJavaObject activ = unityPlayer.GetStatic<AndroidJavaObject> ("currentActivity");
        // インスタンスメソッドを呼ぶ
        Debug.Log(activ.Call<string> ("Fuga"));// FUGAFUGA
    }
        // javaからUnitySendMessageで送られてくる。
    void Hoge(string message){
        Degub.log(message); // HOGEHOGE
    }
}
以上、ありがとうございました。