Android 如何获取Lat() 和获取Long()

Posted

技术标签:

【中文标题】Android 如何获取Lat() 和获取Long()【英文标题】:Android How to getLat() and get Long() 【发布时间】:2015-05-20 15:07:30 【问题描述】:

我正在尝试向用户邮寄我的经纬度,但我收到了 nullPointerException:

尝试在空对象引用上调用虚拟方法“double android.location.Location.getLatitude()”

我猜 getLastKnownLocation() 方法返回 null 是因为模拟器开始时没有位置?

如果是这样,我该如何以另一种方式做到这一点?

这是我的代码:

public class MainActivity extends Activity 


Button btnSend;
TextView txtview;
String email = "superman@hotmail.com";
String position;


@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    txtview = (TextView) findViewById(R.id.textView);
    btnSend = (Button) findViewById(R.id.button);

    LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

    Double lat = location.getLatitude();
    Double lng = location.getLongitude();

     position = Double.toString(lat + lng);



    btnSend.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 



            String[] TO = "batman@hotmail.com";

            Intent sendMypos = new Intent(Intent.ACTION_SEND);
            sendMypos.putExtra(Intent.EXTRA_EMAIL,TO);
            sendMypos.putExtra(Intent.EXTRA_SUBJECT,"Min position");
            sendMypos.putExtra(Intent.EXTRA_TEXT, position);
            sendMypos.setData(Uri.parse("mailto:"));
            sendMypos.setType("message/rfc822");
            startActivity(Intent.createChooser(sendMypos,"Email klient"));
        


    );


我的清单:

 <uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

【问题讨论】:

我认为lmlocationnull。我不认为你可以使用模拟器来运行你的代码。您可以用硬编码值替换latlng 进行测试? 你需要实现Location Listener 【参考方案1】:

我猜 getLastKnownLocation 方法返回 null 是因为模拟器开始时没有位置?

是的,或者提供程序被禁用,或者自从设备重新启动后从未使用过提供程序等。getLastKnownLocation() 可以轻松返回null

如果是这样,我该如何以另一种方式做到这一点?

欢迎您使用getLastKnownLocation()。你只需要检查null的结果,不要盲目使用。

也欢迎您到use requestSingleUpdate() 尝试通过实际启动 GPS 来获得定位。

但是,您不能强制用户和设备为您提供位置信息。如果用户选择保持 GPS 禁用,那是用户的选择。如果设备无法获得 GPS 定位,则不能强制用户移动到具有 GPS 访问权限的位置。以此类推。

【讨论】:

感谢您的快速答复!你是否认为我必须像这样检查 null:` ** if(location == null) Toast.makeText(getBaseContext(),"No locationservice found!",Toast.LENGTH_SHORT).show(); else 双纬度 = location.getLatitude();双 lng = location.getLongitude();位置 = Double.toString(lat + lng); **` @Spoofy:Toast 是否是正确答案取决于您自己,但您需要先查看location 是否为null,然后再开始对其调用方法。 是不是不能像在 Eclipse 中使用 DDM 一样在 Android Studio 中生成 long 和 lat? @Spoofy:我在这里描述的限制与 IDE 无关。您在 Eclipse、Android Studio、IntelliJ IDEA、NetBeans、emacs、vi、记事本等上得到相同的结果。【参考方案2】:

模拟器实际上并不适合测试 GPS(因为模拟器是在没有 GPS 设备的 PC 上运行的。)

改为在真实设备中进行测试。在大多数情况下,真实设备工作正常。但是如果你遇到同样的问题,那么深入调试会有所帮助。

【讨论】:

谢谢!我会在设备上试一试,看看它是否有效!

以上是关于Android 如何获取Lat() 和获取Long()的主要内容,如果未能解决你的问题,请参考以下文章

如何在 android 中仅从 lat, long 获取 City, State, Country

在 Android 中获取准确的 GEO 位置,例如 lat 和 long

每次我使用融合位置 api 获取 lat-long 时都会改变 Lat-long,即使我仍然在同一个位置

如何在AppDelegate获取位置,并将lat和long传递给另一个VC并加载webview

从 1600 万+ lat/long 获取 FIPS 块代码

如何在 Google Map iOS Swift 中获取点击位置的 Lat Long