Android Studio:获取Google地图中当前标记位置的GPS坐标 [英] Android Studio : fetching GPS coordinates of the current marker location in Google Maps
问题描述
我有以下内容需要包含到Android应用程序中,我希望有人可以提供一些编码样本来说明我在这里尝试实现的目标。
-
Android应用在屏幕上显示Google地图界面。
-
该应用程序的用户可以浏览已打开的Google Map界面并选择一个特定的位置。
-
我想获取此GPS坐标位置。
预先致谢!
在这里,答案。它工作正常。
我也从堆栈溢出中发现了这个解决方案,有一些问题。但现在所有解决方案和代码都运行良好。
添加权限以显示
AndroidManifest.xml
<?xml version =1.0encoding =utf-8?>
< manifest xmlns:android =http://schemas.android.com/apk/res/android
package =sichlearning.example.com.androidgpstrackingactivity>
<使用权限android:name =android.permission.ACCESS_COARSE_LOCATION/>
< uses-permission android:name =android.permission.INTERNET/>
< uses-permission android:name =android.permission.ACCESS_FINE_LOCATION/>
< application
android:allowBackup =true
android:icon =@ mipmap / ic_launcher
android:label =@ string / app_name
android:supportsRtl =true
android:theme =@ style / AppTheme>
< activity android:name =。MainActivity>
< intent-filter>
< category android:name =android.intent.category.LAUNCHER/>
< / intent-filter>
< / activity>
< meta-data
android:name =com.google.android.geo.API_KEY
android:value =@ string / google_maps_key/>
android:name =。MapsActivity
android:label =@ string / title_activity_maps>< / activity>
< / application>
< / manifest>
activity_main.xml
<?xml version =1.0encoding =utf-8?>
< LinearLayout xmlns:android =http://schemas.android.com/apk/res/android
android:layout_width =fill_parent
android:layout_height =fill_parent
android:orientation =vertical>
< Button android:id =@ + id / btnShowLocation
android:layout_width =match_parent
android:layout_height =wrap_content
android: text =Show Location
android:layout_gravity =center_horizontal
android:layout_marginTop =50dp
/>
< / LinearLayout>
MainActivity.java
import android.os.Bundle;
导入android.support.v7.app.AppCompatActivity;
导入android.view.View;
导入android.widget.Button;
导入android.widget.Toast;
公共类MainActivity扩展AppCompatActivity {
按钮btnShowLocation;
// GPSTracker类
GPSTracker gps;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnShowLocation =(Button)findViewById(R.id.btnShowLocation);
//显示位置按钮点击事件
btnShowLocation.setOnClickListener(new View.OnClickListener(){
$ b @Override
public void onClick(View arg0 ){
//创建类对象
gps = new GPSTracker(MainActivity.this);
//检查GPS是否启用
if(gps.canGetLocation() ){
double latitude = gps.getLatitude();
double longitude = gps.getLongitude();
// \\\
用于换行
Toast.makeText(getApplicationContext(),Your Location is - \\\
Lat:+ latitude +\\\
Long:+ longitude,Toast.LENGTH_LONG).show();
}其他{
//无法获取位置
// GPS或网络未启用
//要求用户在设置中启用GPS /网络s。
gps.showSettingsAlert();
}
}
});
$ b
GPSTracker.java
import android.Manifest;
导入android.app.AlertDialog;
导入android.app.Service;
导入android.content.Context;
导入android.content.DialogInterface;
导入android.content.Intent;
导入android.content.pm.PackageManager;
导入android.location.Location;
导入android.location.LocationListener;
导入android.location.LocationManager;
导入android.os.Bundle;
导入android.os.IBinder;
导入android.provider.Settings;
导入android.support.v4.app.ActivityCompat;
公共类GPSTracker扩展Service implements LocationListener {
private final Context mContext;
// GPS状态标志
boolean isGPSEnabled = false;
//网络状态标志
boolean isNetworkEnabled = false;
// GPS状态标志
boolean canGetLocation = false;
位置位置; //位置
双纬度; //纬度
双经度; // longitude
//改变的最小距离以米为单位的更新
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10米
//以毫秒为单位的最小更新时间间隔
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1分钟
//声明位置管理器
受保护的LocationManager locationManager;
公共GPSTracker(上下文环境){
this.mContext = context;
getLocation();
public Location getLocation(){
try {
locationManager =(LocationManager)mContext
.getSystemService(LOCATION_SERVICE);
//获取GPS状态
isGPSEnabled = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
//获取网络状态
isNetworkEnabled = locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
$ b $ if(!isGPSEnabled&&!isNetworkEnabled){
//无网络提供者启用
} else {
this.canGetLocation =真正;
if(isNetworkEnabled){
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES,this);
// Log.d(网络,网络);
if(locationManager!= null){
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if(location!= null){
latitude = location.getLatitude();
longitude = location.getLongitude();
$ b //如果GPS启用使用GPS服务获得经纬度
if(isGPSEnabled){
if(location == null ){
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES,this);
// Log.d(GPS已启用,已启用GPS);
if(locationManager!= null){
if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED&& ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION )!= PackageManager.PERMISSION_GRANTED){
// TODO:考虑调用
// ActivityCompat#requestPermissions
//在这里请求缺少的权限,然后覆盖
// public void onRequestPermissionsResult(int requestCode,String [] permissions,
// int [] grantResults)
//处理用户授予权限的情况。有关更多详细信息,请参阅文档
//获取ActivityCompat#requestPermissions。
//返回TODO;
}
location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(location!= null){
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
}
}
} catch(异常e){
}
return位置;
}
/ **
*停止使用GPS侦听器调用此函数将停止在您的
*应用中使用GPS。
* * /
public void stopUsingGPS(){
if(locationManager!= null){
if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager .PERMISSION_GRANTED&&& ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED){
// TODO:考虑调用
// ActivityCompat#requestPermissions
//在这里请求丢失的权限,然后重写
// public void onRequestPermissionsResult(int requestCode,String [] permissions,
// int [] grantResults)
//处理情况用户授予权限。有关更多详细信息,请参阅文档
//获取ActivityCompat#requestPermissions。
return;
}
locationManager.removeUpdates(GPSTracker.this);
$ b $ ** b $ b *函数获得纬度
* * /
public double getLatitude(){
if(location!= null){
latitude = location.getLatitude();
}
//返回纬度
返回纬度;
$ b / **
*获得经度的函数
* * /
public double getLongitude(){
if(location! = null){
longitude = location.getLongitude();
}
//返回经度
返回经度;
}
/ **
*检查GPS / wifi的功能
*
* @return boolean
* * /
public boolean canGetLocation(){
return this.canGetLocation;
$ b $ ** b $ b *显示设置提醒对话框的功能按下设置按钮将
* lauch设置选项
* * /
public void showSettingsAlert(){
AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
//设置DialogHelp标题
alertDialog.setTitle(GPS is settings);
//设置DialogHelp消息
alertDialog
.setMessage(GPS未启用。是否要进入设置菜单?);
//按设置按钮
alertDialog.setPositiveButton(Settings,
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface对话框,int ){
Intent intent = new Intent(
Settings.ACTION_LOCATION_SOURCE_SETTINGS);
mContext.startActivity(intent);
}
});
//按下取消按钮
alertDialog.setNegativeButton(取消,
新DialogInterface.OnClickListener(){
public void onClick(DialogInterface对话框,int ){
dialog.cancel();
}
});
//显示提示信息
alertDialog.show();
}
@Override
public void onLocationChanged(Location location){
try {
float bestAccuracy = -1f;
if(location.getAccuracy()!= 0.0f&&(location.getAccuracy()< bestAccuracy)|| bestAccuracy == -1f){
if(ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED&&& ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED){
// TODO:考虑调用
// ActivityCompat#requestPermissions
//在这里请求丢失的权限,然后覆盖
// public void onRequestPermissionsResult(int requestCode,String [] permissions,
// int [] grantResults)
//处理01user授予权限的情况。有关更多详细信息,请参阅文档
//获取ActivityCompat#requestPermissions。
// return;
}
locationManager.removeUpdates(this);
}
bestAccuracy = location.getAccuracy();
} catch(NullPointerException e){
System.out.print(Caught the NullPointerException);
@Override
public void onProviderDisabled(String provider){
}
@Override
public void onProviderEnabled(String provider){
}
@Override $ b $ public void onStatusChanged(String provider,int status,Bundle extras){
}
@Override
public IBinder onBind(Intent arg0){
return null;
public float getAccurecy()
{
return location.getAccuracy();
}
}
I have the following that needs to be included into an Android application, I'm hoping someone could provide some coding samples to illustrate what exactly I'm attempting to achieve here.
The Android App has a Google Maps interface on the screen.
User of the App can browse through the opened Google Map interface and select a particular location.
I want to fetch the GPS coordinates of this location.
Thanks in advance!!
Here, Answer. It's working fine. I also found this solution from stack overflow with some problem. But now all resolved and code work well.
Add Permission to manifest AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="sichlearning.example.com.androidgpstrackingactivity">
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key" />
<activity
android:name=".MapsActivity"
android:label="@string/title_activity_maps"></activity>
</application>
</manifest>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button android:id="@+id/btnShowLocation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Show Location"
android:layout_gravity="center_horizontal"
android:layout_marginTop="50dp"
/>
</LinearLayout>
MainActivity.java
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button btnShowLocation;
// GPSTracker class
GPSTracker gps;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnShowLocation = (Button) findViewById(R.id.btnShowLocation);
// Show location button click event
btnShowLocation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// Create class object
gps = new GPSTracker(MainActivity.this);
// Check if GPS enabled
if(gps.canGetLocation()) {
double latitude = gps.getLatitude();
double longitude = gps.getLongitude();
// \n is for new line
Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();
} else {
// Can't get location.
// GPS or network is not enabled.
// Ask user to enable GPS/network in settings.
gps.showSettingsAlert();
}
}
});
}
}
GPSTracker.java
import android.Manifest;
import android.app.AlertDialog;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import android.support.v4.app.ActivityCompat;
public class GPSTracker extends Service implements LocationListener {
private final Context mContext;
// flag for GPS status
boolean isGPSEnabled = false;
// flag for network status
boolean isNetworkEnabled = false;
// flag for GPS status
boolean canGetLocation = false;
Location location; // location
double latitude; // latitude
double longitude; // longitude
// The minimum distance to change Updates in meters
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters
// The minimum time between updates in milliseconds
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute
// Declaring a Location Manager
protected LocationManager locationManager;
public GPSTracker(Context context) {
this.mContext = context;
getLocation();
}
public Location getLocation() {
try {
locationManager = (LocationManager) mContext
.getSystemService(LOCATION_SERVICE);
// getting GPS status
isGPSEnabled = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
// getting network status
isNetworkEnabled = locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled) {
// no network provider is enabled
} else {
this.canGetLocation = true;
if (isNetworkEnabled) {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
// Log.d("Network", "Network");
if (locationManager != null) {
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
// if GPS Enabled get lat/long using GPS Services
if (isGPSEnabled) {
if (location == null) {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
// Log.d("GPS Enabled", "GPS Enabled");
if (locationManager != null) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
//return TODO;
}
location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
}
}
} catch (Exception e) {
}
return location;
}
/**
* Stop using GPS listener Calling this function will stop using GPS in your
* app.
* */
public void stopUsingGPS() {
if (locationManager != null) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
locationManager.removeUpdates(GPSTracker.this);
}
}
/**
* Function to get latitude
* */
public double getLatitude() {
if (location != null) {
latitude = location.getLatitude();
}
// return latitude
return latitude;
}
/**
* Function to get longitude
* */
public double getLongitude() {
if (location != null) {
longitude = location.getLongitude();
}
// return longitude
return longitude;
}
/**
* Function to check GPS/wifi enabled
*
* @return boolean
* */
public boolean canGetLocation() {
return this.canGetLocation;
}
/**
* Function to show settings alert dialog On pressing Settings button will
* lauch Settings Options
* */
public void showSettingsAlert() {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
// Setting DialogHelp Title
alertDialog.setTitle("GPS is settings");
// Setting DialogHelp Message
alertDialog
.setMessage("GPS is not enabled. Do you want to go to settings menu?");
// On pressing Settings button
alertDialog.setPositiveButton("Settings",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(
Settings.ACTION_LOCATION_SOURCE_SETTINGS);
mContext.startActivity(intent);
}
});
// on pressing cancel button
alertDialog.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
// Showing Alert Message
alertDialog.show();
}
@Override
public void onLocationChanged(Location location) {
try {
float bestAccuracy = -1f;
if (location.getAccuracy() != 0.0f && (location.getAccuracy() < bestAccuracy) || bestAccuracy == -1f) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the 01user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
// return ;
}
locationManager.removeUpdates(this);
}
bestAccuracy = location.getAccuracy();
} catch (NullPointerException e) {
System.out.print("Caught the NullPointerException");
}
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
public float getAccurecy()
{
return location.getAccuracy();
}
}
这篇关于Android Studio:获取Google地图中当前标记位置的GPS坐标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!