首页 > android程序确定自己手机位置的问题?

android程序确定自己手机位置的问题?

MainActivity:

package com.example.archer.c11_locationtest;

import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;

public class MainActivity extends AppCompatActivity {

private TextView positionTextView;
private LocationManager locationManager;
private String provider;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    positionTextView= (TextView) findViewById(R.id.positionId);
    locationManager= (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    //获取所有可用的位置提供器
    List<String>providerList=locationManager.getProviders(true);
    if (providerList.contains(LocationManager.GPS_PROVIDER)){
        provider=LocationManager.GPS_PROVIDER;
    }else if(providerList.contains(LocationManager.NETWORK_PROVIDER)){
        provider=LocationManager.NETWORK_PROVIDER;
    }else{
        //当没有可用位置提供器时,弹出Toast提示用户
        Toast.makeText(this,"No location provider to use ",Toast.LENGTH_SHORT).show();
          return;
    }

    Location location=locationManager.getLastKnownLocation(provider);
            if(location!=null){
                //显示当前设备的位置信息
                showLocation(location);
            }

    locationManager.requestLocationUpdates(provider,5000,1,locationListener);

}

@Override
protected void onDestroy() {
    super.onDestroy();

    if (locationManager!=null){
        //关闭程序时,将监听器移除
        locationManager.removeUpdates(locationListener);
    }
}

LocationListener locationListener=new LocationListener() {
    @Override
    public void onLocationChanged(Location location) {
        //更新当前设备的位置信息
        showLocation(location);

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {

    }

    @Override
    public void onProviderEnabled(String provider) {

    }

    @Override
    public void onProviderDisabled(String provider) {

    }
};

private void showLocation(Location location) {

    String currentPosition="latitude is "+location.getLatitude()+"\n"+"longitude is "+location.getLongitude();

          positionTextView.setText(currentPosition);
}

}

activity_main:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/positionId"
         />
</LinearLayout>

权限也给了:

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

为什么就是拿不到自己位置的经纬度??


应该是GPS信号不好的问题,你可以到室外去试一下。另外,你的代码中调用了网络定位API,需要加上另外两个权限。

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


为什么不用百度地图的SDK。


室内 GPS 信号不好,测试时可以改成网络定位优先

if (providerList.contains(LocationManager.NETWORK_PROVIDER)) {
    provider = LocationManager.NETWORK_PROVIDER;
} else if (providerList.contains(LocationManager.GPS_PROVIDER)) {
    provider = LocationManager.GPS_PROVIDER;
} else {
    // 当没有可用的位置提供器时,弹出Toast提示用户
    Toast.makeText(this, "No location provider to use", Toast.LENGTH_SHORT).show();
    return;
}

同时记得在权限中加上

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

很显然你是看的“第一行代码”敲的

【热门文章】
【热门文章】