java - 无法使用经度和纬度Android获取地址

标签 java android google-maps maps

我正在尝试从经度和纬度获取地址,但无法获取地址。我要隆基。和拉蒂。值,但是当我将其传递给getAddress函数时,它将停止工作。如果可以,请帮助我。
这是我的代码

MainActivity.java文件

package com.example.mygps;

import java.io.IOException;
import java.util.List;
import java.util.Locale;

import android.app.Activity;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivity extends Activity {

    Button btnGet;
    GPS_Class gps;
    TextView adr,cty,ctry;

    double longi, lati;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnGet = (Button)findViewById(R.id.btnGo);
        adr = (TextView)findViewById(R.id.adr);
        cty = (TextView)findViewById(R.id.cty);
        ctry = (TextView)findViewById(R.id.ctry);

        btnGet.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                gps = new GPS_Class(MainActivity.this);
                if(gps.canGetLocation())
                {

                    longi = gps.getLongitude();
                    lati = gps.getLatitude();
                    Toast.makeText(MainActivity.this, "Longitude is:"+longi+"Latidute is:"+lati, Toast.LENGTH_LONG).show();
                    getAddress(longi, lati);
                }
                else
                {
                    gps.showSettingsAlert();

                }
            }
        });

    }

    public void getAddress(double longitude, double latitude)
    {
        double long1,lati1;
        long1 = longitude;
        lati1 = latitude;
        if(lati>0 && long1>0)
        {
        Geocoder geocode = new Geocoder(this, Locale.getDefault());
        List<Address> addresses;

        try {
            addresses = geocode.getFromLocation(latitude,longitude, 1);

            String Addres_ = addresses.get(0).getAddressLine(0);
            String Country = addresses.get(0).getCountryName();
            String City = addresses.get(0).getLocality();

            adr.setText(Addres_);
            cty.setText(City);
            ctry.setText(Country);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            }
        }//if closing. . . 
        else
        {
            Toast.makeText(this, "No Vlaue", Toast.LENGTH_LONG).show();
        }


    }
}


我的GPS_Class.java文件代码

package com.example.mygps;

import android.app.AlertDialog;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;

public class GPS_Class extends Service implements LocationListener{



    //To Get Context of the class...
    Context context;

    //Declaring Variable to use. . .
    double lattitude;
    double longitude;

    private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10;
    private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1;

    boolean isGPSEnabled = false;
    boolean isNetWorkEnabled = false;
    boolean canGetLocation = false;

    //Declaring objects of different classes...
    Location location;
    LocationManager locationmanager;

    public GPS_Class(Context context) {
        this.context = context;
        GetLocation();
    }

    //Self Coded Function to perform all location works . . .
    private Location GetLocation()
    {
        locationmanager = (LocationManager)context.getSystemService(LOCATION_SERVICE);  

        isGPSEnabled = locationmanager.isProviderEnabled(LocationManager.GPS_PROVIDER);

        isNetWorkEnabled = locationmanager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

        if(isNetWorkEnabled)
        {
            canGetLocation = true;
            locationmanager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,MIN_TIME_BW_UPDATES,MIN_DISTANCE_CHANGE_FOR_UPDATES,this);

            if(locationmanager !=null)
            {
                location = locationmanager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                if(location !=null)
                {
                    lattitude = location.getLatitude();
                    longitude = location.getLongitude();
                }
            }
        }

        if(isGPSEnabled)
        {
            canGetLocation = true;
            if(location == null)
            {
            locationmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER,MIN_TIME_BW_UPDATES,MIN_DISTANCE_CHANGE_FOR_UPDATES,this);
            if(locationmanager != null)
            {
                location = locationmanager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

                if(location!=null)
                {
                    lattitude = location.getLatitude();
                    longitude = location.getLongitude();
                }
            }
        }
        }

        return location;
    }

     public void showSettingsAlert(){
            AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);

            // Setting Dialog Title
            alertDialog.setTitle("GPS is settings");

            // Setting Dialog 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);
                    context.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();
        }


     public double getLatitude(){
            if(location != null){
                lattitude = location.getLatitude();
            }

            // return latitude
            return lattitude;
        }

    public double getLongitude()
    {
        if(location !=null)
        {
        longitude =location.getLongitude();
        }
        return longitude;
    }

    public boolean canGetLocation() {
        return this.canGetLocation;
    }
    @Override
    public void onLocationChanged(Location arg0) {
        // TODO Auto-generated method stub

    }

    @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
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }


}

最佳答案

得到了解决方案
上面提到的发布代码很好,它可以获取当前位置。
如果您尝试在模拟器上运行它,则会显示错误,因为“ Geocoder”类与模拟器不兼容。
在正常运行的设备上运行它。

关于java - 无法使用经度和纬度Android获取地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35231432/

相关文章:

android - 改造进度条

javascript - 将 Google map 样式数组转换为 Google 静态 map 样式字符串

javascript - 无法使用地理位置加载 Google Maps API

java - Maven-ear-plugin自定义最终名称

java - 强制Android TTS将时间解析为文本?

android - 在 Kotlin 中将位图保存为图像

javascript - 如何链接(谷歌地图)信息窗口文本字符串?

java - 如何计算 2 的幂 N,其中 N 是一个非常大的数

java - 带有IntelliJ属性p:prefix的Spring此处不允许

向 RootTools v4.2 shell 添加命令时,Android 应用程序崩溃