- Home /
 
Accessing Data from a Android java class
I am trying to access what level that has been choosen when starting the Unity application. Unity is started from my (Android java) UnityPlay class. I want to know what button that was pressed to launch Unity to know what scene to load.
The UnityPlay class:
 package com.company.project;
     ...
     public class UnityPlay extends UnityPlayerActivity{
     
     public String selectedItem;
 
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
     }
     public String getSelectedItem() {
         selectedItem = "levelname";
         return selectedItem;
         }
 }
 
               In Unity a script is created and added to a object:
 function Start() {
     yield WaitForSeconds(3.0);
     var jo = new AndroidJavaObject("com.company.project.UnityPlay");
     var level = jo.Call.<String>("getSelectedItem");
     
     Application.LoadLevel(level);
 }
 
               As far as I can see the return value of the request is null or a blank String "".
Answer by liortal · May 26, 2014 at 05:52 PM
There are some issues with the code you posted:
Did you update the AndroidManifest.xml with details about your new custom Activity class?
In your Start() method, you are creating a AndroidJavaObject, which means you are attempting to build a new UnityPlay object in Java. What you intent to do is grab the active Activity class and call methods on it.
What you should do is provide some global (e.g: static) access to your UnityPlay class, grab that instance that is already created at startup by Android, and then call the getSelecdtedItem method on it.
In your Activity class, add a new static field:
 public static UnityPlay activity;
 
               In your onCreate, initialize this field:
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     activity = this;
 }
 
               Then, in your Unity code:
 function Start() {
     yield WaitForSeconds(3.0);
     var jc = new AndroidJavaClass("com.company.project.UnityPlay");
     var activity = jc.GetStatic<AndroidJavaObject>("activity");
 
     var level = activity.Call.<String>("getSelectedItem");
  
     Application.LoadLevel(level);
 }
 
               This is all in theory, i haven't tested it.
Your answer
 
             Follow this Question
Related Questions
How do I use Java callbacks? 1 Answer
Using AndroidJavaObject properly 1 Answer
How to translate ArrayList to C# using AndroidJavaClass? 1 Answer
NoSuchMethodError calling android method 2 Answers