Current Location using Location Manager in android studio emulator - android

I am developing an app that get user current location using location manager or google places api. Using google places api I can get location in both emulator and real devices.
Working with current location in android emulator
For me it returns null.
Note: It was my fault that I didn't set lat and lon on emulator

Yep, That is something you gotta see, Even Bluetooth Does not work Well.
On to the Question:
Start your Emulator.
Press the 3 dots at the bottom.
Go to the GPS Section.
Write the Latitude and Longitude
Press Send!
Done!

It was my fault that I didn't give any lat lng in my emulator. Or may be didn't tap on send button or may be internet problem. But there was problem

Related

Is there any solution for getting location in android emulator flutter

I'm using geolocator package for the purpose of device current location when I'm using my app in my real device that's perfectly run and returning back the exact long and lang when I'm using the same app in android emulator nothing is returning how I can resolve this issue?
The default location in Android Emulator is Googleplex, Mountain View (US). You cannot track Emulator location but can simulate it. An example how to do it here
The only thing that worked for me, was changing the location and then going into Google Maps on the emulator, enable location there and wait for it to jump from the Googleplex location, to the custom location. Then I restarted my app, and it returned the correct location.

Genymotion GPS is not updating

I have installed genymotion along with the google play services. I have installed Google Maps using the apps store and i would like it to update my location to either my current location or a fake location i provided. The reason is that i am trying to test an app that uses the google maps api.
Device i created is a Galaxy S6 -6.0.0 - API level 23
Settings > Personal > Location > High Accuracy is on
GPS for the emulator is ON and the location is set. When i go back to my app however, it is not updating the location on the map.
Is there a way to inject the location with geny shell or?
EDIT : I can also access my maps app from the browser but I get the following:
1) website wants to know your location? I press share location
2) This site cannot access your location. Change this on the Settings > Advanced > Website screen
There is nothing to do here except clear location preferences for individual sites.
Any help or advice is appreciated.
For anyone retrieving getLastKnownLocation on Genymotion in order to set a point on the map or something of the sort like this:
LocationManager locationManager = (LocationManager)getActivity().getSystemService(
AppCompatActivity.LOCATION_SERVICE);
// First try and get last location from network provider
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
// If that doesn't work, try the GPS provider
if(location == null) {
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}
Setting the device lat/lng through the GPS widget or the Genymotion shell does not automatically update your lastKnownLocation the device. I had to manually open Maps, let it update to the specified position in order to set lastKnowLocation, and it worked from there.

Set GPS location in Android Studio while debugging app

(Preface: I have already seen this question, but it doesn't address setting the location while debugging the app. Opening "Android Device Monitor" closes the ADB connection to the debugger itself.)
I am trying to debug an application that monitors for location changes. The issue that I have is that I can't figure out how to run the debugger and set the location using adb geo fix ... at the same time.
I have tried running the command in the Android Studio "Debug" -> "Console" tab, but it doesn't seem to do anything.
How can I set the location while still remaining connected in the debugger?
1- go to plugins and look for GPS emulator, and install it then start the emulator from Tools--> Android---> Android device monitor
then find you desired location long and lat (search google for any website that gives you the lang lat for your city, google: get lang lat websites) and send them to the android emulator.
2- or fastes way if android emulator is running On the Right Side of Your Android Emulator Where (Power Button ,Speaker , Camera etc Sign are given Find Three Dot Sign(...) at the last of that column. click on that then Click on location and Set the Latitude and longitude
In the end, I did this using Android GPS Emulator, a Java program which runs on the computer and sends location updates over ADB.
You should install application that can set fake gps location like https://play.google.com/store/apps/details?id=com.fakegps.mock run it first, then run your app.

how to get the current longitude and latitude via android emulator [duplicate]

I want to get longitude and latitude in Android emulator for testing.
Can any one guide me how to achieve this?
How do I set the location of the emulator to a test position?
You can connect to the Emulator via Telnet. You then have a Emulator console that lets you enter certain data like geo fixes, network etc.
How to use the console is extensively explained here.
To connect to the console open a command line and type
telnet localhost 5554
You then can use the geo command to set a latitude, longitude and if needed altitude on the device that is passed to all programs using the gps location provider. See the link above for further instructions.
The specific command to run in the console is
geo fix <longitude value> <latitude value>
I found this site useful for finding a realistic lat/lng: http://itouchmap.com/latlong.html
If you need more then one coordinate you can use a kml file with a route as well it is a little bit described in this article. I can't find a better source at the moment.
No one here mentioned the built in solution of the emulator itself, so for future visitors, I'd like to share it with visuals.
First, run your Android Emulator and click on the menu button (3 dots) shown below:
Then from the left pane, select Location and change the coordinates according to your needs. After pressing Send button, changes will immediately take effect (I recommend you to open up Google Maps for better understanding).
Android Studio Version: 2.3.3
In addition, to make your different locations coming to your application in real time, you can use GPX file. It's very easy to create this file from Google Map direction link:
Go to google map, choose a location, then press "Directions" and enter the second location.
After route is created, copy a link from the browser
Go to this website: https://mapstogpx.com and paste the link to "Let's Go" box
Press the "Let's Go" button and GPX file will be downloaded
Use "Load GPS/KML" button to load the created file to your emulator, choose speed, and press green play button on the bottom. Locations will be sent in real time as shown on the picture below.
I was looking for a better way to set the emulator's GPS coordinates than using geo fix and manually determining the specific latitude and longitude coordinates.
Unable to find anything, I put together a little program that uses GWT and the Google Maps API to launch a browser-based map tool to set the GPS location in the emulator:
android-gps-emulator
Hopefully it can be of use to help others who will undoubtedly stumble across this difficulty/question as well.
If you're using Eclipse, go to Window->Open Perspective->DDMS, then type one in Location Controls and hit Send.
For Android Studio users:
run the emulator,
Then, go to Tools -> Android ->Android device monitor
open the Emulator Control Tab, and use the location controls group.
Sorry for the NecroPost, but after following some of the suggestions on this question, I set my location to Alaska. However, my device was still showing to be in Mountain View, California (Google's HQ?). So here's how I did a fix:
1) Go to the location settings:
2) Set your test location. I chose Alaska.
3) Google "My current location" and click on the map circled in the picture.
Note that even though I set location as Alaska, my Virtual Device still thinks it's in Mountain View, California.
4) Click on this location Icon
Your location should now be updated on your device.
You can verify by Googling "My current location" again.
If anyone experienced this same issue, I hope my solution helped you.
Assuming you've got a mapview set up and running:
MapView mapView = (MapView) findViewById(R.id.mapview);
final MyLocationOverlay myLocation = new MyLocationOverlay(this, mapView);
mapView.getOverlays().add(myLocation);
myLocation.enableMyLocation();
myLocation.runOnFirstFix(new Runnable() {
public void run() {
GeoPoint pt = myLocation.getMyLocation();
}
});
You'll need the following permission in your manifest:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
And to send mock coordinates to the emulator from Eclipse, Go to the "Window" menu, select "Show View" > "Other" > "Emulator control", and you can send coordinates from the emulator control pane that appears.
For the new emulator:
http://developer.android.com/tools/devices/emulator.html#extended
Basically, click on the three dots button in the emulator controls (to the right of the emulator) and it will open up a menu which will allow you to control the emulator including location
1. Android Studio users.
After running the emulator goto Tools->Android->Android device monitor
Click the Emulator Control Tab change from the location controls group.
2. Eclipse users.
First In Eclipse In Menu Select "Window" then Select "Open Perspective" then Select "DDMS".
i.e Window->Open Prespective->DDMS.
You will see on Left Side Devices Panel and on Right Side you will see different tabs.
Select "Emulator Control" Tab.
At bottom you will see Location Controls Panel.
Select "Manual" Tab.
Enter Longitude and Latitude in Textboxs then Click Send Button.
It will send the position to you emulator and the application.
3. Using telnet.
In the run command type this.
telnet localhost 5554
If you are not using windows you can use any telnet client.
After connecting with telnet use the following command to send your position to emulator.
geo fix long lat
geo fix -121.45356 46.51119 4392
4. Use the browser based Google maps tool
There is a program that uses GWT and the Google Maps API to launch a browser-based map tool to set the GPS location in the emulator:
android-gps-emulator
Finally with the latest release of Android Studio 4 and his new Emulator update 10/23/2019 it become easier.
Start your emulator and go to emulator parameters ... > in "Routes" tab you can choose two points on the map from/to and start a new route with an adjustable playback speed that can go to more than 1000km/h!
The following solution worked for me - open command line and write:
adb emu geo fix [longtitude] [latitude]
Using the "geo" command in the emulator console
To send mock location data from the command line:
Launch your application in the Android emulator and open a terminal/console in your SDK's /tools directory.
Connect to the emulator console:
telnet localhost 5555 (Replace 5555 with whatever port your emulator is running on)
Send the location data:
* geo fix to send a fixed geo-location.
This command accepts a longitude and latitude in decimal degrees, and an optional altitude in meters. For example:
geo fix -121.45356 46.51119 4392
I wrote a python script to push gps locations to the emulator via telnet. It defines a source and a destination location. There is also a time offset which lets you control how long coordinates will be pushed to the device. One location is beeing pushed once a second.
In the example below the script moves from Berlin to Hamburg in 120 seconds. One step/gps location per second with random distances.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import telnetlib
from time import sleep
import random
HOST = "127.0.0.1"
PORT = 5554
TIMEOUT = 10
LAT_SRC = 52.5243700
LNG_SRC = 13.4105300
LAT_DST = 53.5753200
LNG_DST = 10.0153400
SECONDS = 120
LAT_MAX_STEP = ((max(LAT_DST, LAT_SRC) - min(LAT_DST, LAT_SRC)) / SECONDS) * 2
LNG_MAX_STEP = ((max(LNG_DST, LNG_SRC) - min(LNG_DST, LNG_SRC)) / SECONDS) * 2
DIRECTION_LAT = 1 if LAT_DST - LAT_SRC > 0 else -1
DIRECTION_LNG = 1 if LNG_DST - LNG_SRC > 0 else -1
lat = LAT_SRC
lng = LNG_SRC
tn = telnetlib.Telnet(HOST, PORT, TIMEOUT)
tn.set_debuglevel(9)
tn.read_until("OK", 5)
tn.write("geo fix {0} {1}\n".format(LNG_SRC, LAT_SRC))
#tn.write("exit\n")
for i in range(SECONDS):
lat += round(random.uniform(0, LAT_MAX_STEP), 7) * DIRECTION_LAT
lng += round(random.uniform(0, LNG_MAX_STEP), 7) * DIRECTION_LNG
#tn.read_until("OK", 5)
tn.write("geo fix {0} {1}\n".format(lng, lat))
#tn.write("exit\n")
sleep(1)
tn.write("geo fix {0} {1}\n".format(LNG_DST, LAT_DST))
tn.write("exit\n")
print tn.read_all()
In Linux where communication ports are blocked. navigate the terminal to platform-tools folder inside android sdk and fire this command:
./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
In Mac, Linux or Cygwin:
echo 'geo fix -99.133333 19.43333 2202' | nc localhost 5554
That will put you in Mexico City. Change your longitude/latitude/altitude accordingly. That should be enough if you are not interested in nmea.
I use eclipse plug DDMS function to send GPS.
See Obtaining User Location
Look under Providing Mock Location Data. You will find the solution for it.
First go in DDMS section in your eclipse
Than open emulator Control ....
Go To Manual Section
set lat and long and then press Send Button
I was trying to set the geo fix through adb for many points and could not get my app to see any GPS data. But when I tried opening DDMS, selecting my app's process and sending coordinates through the emulator control tab it worked right away.
Dalvik Debug Monitor > Select Emulator > Emulator Control Tab > Location Controls.
DDMS -- android_sdk/tools/ddms OR android_sdk/tools/monitor
If you are using eclipse then using Emulator controller you can manually set latitude and longitude and run your map based app in emulator
If you're using Android Studio (1.3):
Click on Menu "Tools"
"Android"
"Android device monitor"
click on your current Emulator
Tab "Emulator Control"
go to "Location Controls" and enter Lat and Lon
Just make Alberto Gaona's answer into one line
token=$(cat ~/.emulator_console_auth_token); cat <(echo -e "auth $token \n geo fix 96.0290791 16.9041016 \n exit") - | nc localhost 5554
5554 is the emulator port number shown in adb devices.
It would have been better if adb emu work.
Go to Extended controls in emulate. After You can then set the location for the emulate by searching or dragging the map to the location you want to set.
Finally Click on SET LOCATION button to save.
If the above solutions don't work. Try this:
Inside your android Manifest.xml, add the following two links OUTSIDE of the application tag, but inside your manifest tag of course
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
<uses-permission android:name="android.permission.INTERNET" ></uses-permission>
I was unable to get a GPS fix on the emulator when emulator was running Android image without Google APIs. As soon as I changed the image to contain Google APIs all of the here mentioned ways to get a GPS fix worked.
Make sure you select an image with Google APIs when creating AVD.
The already mentioned multiple times answer to use the shell command "geo fix..." is the correct answer.
But in case you use LocationClient.getLastLocation() to retrieve your data it is worth to mention that it will not work at first. The LocationClient class uses the Google Play Service to retrieve the coordinates.
For me this started working after running the emulators maps app once. During the first start you are asked to allow google apps access to your location, which I guess does the trick.
For a project of my own, I developed an online service which can provide simulated location to the Android emulator.
It uses geo nmea rather than geo fix which allows it to set speed, course, precise time etc. in addition to just lat/lon.
The service requires the nc (netcat) command line utility and nothing else.
http://www.kisstech.ch/nmea/
You can use an emulator like genymotion which gives you the flexibility to emulate your present GPS location, etc.
There is a plugin for Android Studio called “Mock Location Plugin”.
You can emulate multiple points with this plugin.
You can find a detailed manual of use in this link: Android Studio. Simulate multiple GPS points with Mock Location Plugin

android Gps Application

i did the GPS application which gets the current location.It is working in android emulator by using DDMS perspective(by passing mock location).But it is not working in android phone and phone is Samsung gt-i5801.please help me.
And one more thing i want to ask you guys.
(Why i need Gps) bcoz
in my appln i want to display the nearest cinema theatres by using latitude and longitude.
Is there any other way to do that.
Please tell me.
I think there is no problem in your code if it runs in emulator. But you have not start the gps on your phone, so it's giving a null pointer exception.
So now when you use gps, first check whether gps is on or not. Then fetch lat. and long.
You can check your gps is on or off by this:
LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
boolean val= mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
First of all, tell us what errors are you getting when you run it on the device. Logcat messages!?
Secondly, there must be any webservice which gives you the nearby cinema theatres, so you might be required to give it your current location in latitude and longitude.
For getting your current location, GPS is necessary.
On the other note, you can also use NETWORK_PROVIDER to get your current location.

Categories

Resources