I’m trying to use some android features that aren’t implemented on Unity, so I decided to create a plugin for this.
I wrote a Java class to access the gps (just for testing) and return the values, turned it into a library, moved the classes.jar to my project and added it into my buildpath, copied my jar to my Assets/Plugins/Android folder with it’s AndroidManifest.xml, but everytime i try to run the app on my phone it closes without any error (even on logcat).
I got some Log.d on my java class and they do show on logcat.
Here is what i got:
Gps.java
package com.wilcx.testsuit;
import com.unity3d.player.UnityPlayerActivity;
import android.app.Activity;
import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import com.unity3d.player.UnityPlayerActivity;
public class Gps extends UnityPlayerActivity implements LocationListener
{
private Location location;
private String provider;
private LocationManager locationManager;
private boolean locationUpdated = false;
int lat = 0;
int lng = 0;
@Override
protected void onCreate(Bundle myBundle)
{
super.onCreate(myBundle);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, false);
Log.d("unity", "create");
}
public void InitializeGPS()
{
Log.d("unity", "initialize");
location = locationManager.getLastKnownLocation(provider);
locationManager.requestLocationUpdates(provider, 400, 1, this);
}
public boolean GetGpsStatus()
{
return locationUpdated;
}
public void onLocationChanged(Location location)
{
locationUpdated = true;
lat = (int) (location.getLatitude());
lng = (int) (location.getLongitude());
}
public int GetLat()
{
return lat;
}
public int GetLng()
{
return lng;
}
@Override
public void onProviderDisabled(String arg0)
{
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String arg0)
{
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2)
{
// TODO Auto-generated method stub
}
@Override
protected void onResume()
{
super.onResume();
Log.d("unity", "resume");
locationManager.requestLocationUpdates(provider, 400, 1, this);
}
@Override
protected void onPause()
{
super.onResume();
Log.d("unity", "pause");
locationManager.removeUpdates(this);
}
}
Android Manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wilcx.testsuit"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
<application android:label="@string/app_name">
<activity android:name=".Gps"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
My C# class:
using UnityEngine;
using System.Collections;
public class PluginAccess : MonoBehaviour
{
private AndroidJavaObject GPS;
public UILabel label;
/// <summary>
/// Start this instance.
/// </summary>
void Start ()
{
AndroidJNI.AttachCurrentThread();
GPS = new AndroidJavaObject("com.wilcx.testsuit.Gps");
GPS.Call("InitializeGPS");
label.text = GPS.Call<bool>("GetGpsStatus").ToString();
Debug.Log("Fora do Loop");
while(!GPS.Call<bool>("GetGpsStatus"))
{
label.text = "Lat Not Set";
Debug.Log("Dentro do Loop");
}
int lat = GPS.Call<int>("GetLat");
label.text = lat.ToString();
}
}