• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
1
Question by Zynpo · Apr 14, 2017 at 11:06 PM · androidjavaobject

Using AndroidJavaObject to get Location

On my Android I am trying to get access to the Location object through the Android sdk.

However, I am getting the error "no such static method with name='getLastKnownLocation"

Does anyone seen anything wrong with this code?

     using (var locationManager = new AndroidJavaClass("android.location.LocationManager"))
             {
                 AndroidJavaObject locationObj = locationManager.Call<AndroidJavaObject>("getLastKnownLocation", "gps");
                 if (locationObj != null)
                 {
                     double latitude = locationObj.Call<double>("getLatitude");
                     double longitude = locationObj.Call<double>("getLongitude");
                     isMock = locationObj.Call<bool>("isFromMockProvider");
                }
          }
Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
1
Best Answer

Answer by Bunny83 · Apr 15, 2017 at 12:09 AM

Well, you don't have an instance of the LocationManager and getLastKnownLocation is an instance method of that class. You only get your hand on the class but not on an actual instance. As you can read in the docs an instance of that class can't be created manually but has to be aquired through

 Context.getSystemService(Context.LOCATION_SERVICE)

getSystemService is also an instance method of the Context class. To get the context of your Unity app you usually use:

 using(var unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
 using(var context = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity"))

With the context you should be able to call "getSystemService" with the string parameter "location"

 using(var unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
 using(var context = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity"))
 using(var locationManager = context.Call<AndroidJavaObject>("getSystemService", "location"))
 using(var locationObj = locationManager.Call<AndroidJavaObject>("getLastKnownLocation", "gps"))
 {
     if (locationObj != null)
     {
         double latitude = locationObj.Call<double>("getLatitude");
         double longitude = locationObj.Call<double>("getLongitude");
         isMock = locationObj.Call<bool>("isFromMockProvider");
     }
 }

Haven't tested it but it should work as long as you have the "ACCESS_FINE_LOCATION" permission, the device has a GPS provider and that provider is enabled.

Though i'm wondering why you don't just use Unity's LocationService API?

Comment
Add comment · Show 1 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image Zynpo · Apr 15, 2017 at 02:06 AM 1
Share

This is working great to get the initial reading.

If I make the call again (after disabling mock location in phone developer settings) the value is not changing though.

I tried calling reset() but this just clears all values.

How do I force it to update the reading?

Thanks.

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

67 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Using Android JAR library (Smaad SDK) with Unity 3 Answers

Android Share intent Twitter not working? 0 Answers

What I have to do to add com.unity3d to my Android game? 0 Answers

AndroidJavaClass. Call returns null ptr. 1 Answer

AndroidJavaProxy no such method exception,AndroidJavaProxy no such proxy method error 2 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges