【问题标题】:Getting Latitude and Longitude Gives Me Always 0,0 uisng GPS使用 GPS 获取纬度和经度总是给我 0,0
【发布时间】:2017-01-06 07:42:07
【问题描述】:

每当我获得纬度和经度时,我都会收到一个特定错误,它总是显示 0,0 我已经物理更改了我的位置以生效,但它仍然显示我 0,0 ??

这是我的 mainacticity 类的代码

public class MainActivity extends AppCompatActivity {
    Thread t;
    ConnectivityManager connectivityManager;
    NetworkInfo activeNetworkInfo;
    SaveDataOffline saveoffline;
    SaveDataOnline saveonline;
    GPSTracker loc;
    TelephonyManager telephonyManager;
    String x;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        loc = new GPSTracker(this);
        t = new Thread(new Runnable() {
            @Override
            public void run() {
                if(loc.isupdate==true) {
                    SaveData();
                    loc.isupdate = false;
                }
            }
        });
    }
    public void SaveData(){
            if(loc.location!=null){
                connectivityManager
                        = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
                activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
                boolean isConnected = activeNetworkInfo != null &&
                        activeNetworkInfo.isConnectedOrConnecting();
                telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
                if(!isConnected){
                    //notonline
                    Toast.makeText(this,"Offline",Toast.LENGTH_LONG).show();
                    saveoffline = new SaveDataOffline(this);
                    saveoffline.insertData(String.valueOf(loc.getLat()),String.valueOf(loc.getLng()),String.valueOf(telephonyManager.getDeviceId()));
                }
                else{
                    //online
                    Toast.makeText(this,"Online",Toast.LENGTH_LONG).show();
                    saveonline = (SaveDataOnline) new SaveDataOnline(this,String.valueOf(loc.getLat()),String.valueOf(loc.getLng()),String.valueOf(telephonyManager.getDeviceId())).execute();

                }
                // \n is for new line
            }else{
                // can't get location
                // GPS or Network is not enabled
                // Ask user to enable GPS/network in settings
               // loc.showSettingsAlert();
            }
    }
}

这是我的 GPSTRacker 类的代码

public class GPSTracker extends Thread implements LocationListener {

    Context context;
    LocationManager locationManager;
    String provider;
    String lat;

    public String getLng() {
        return lng;
    }

    public String getLat() {
        return lat;
    }

    String lng;
    Location location;
    boolean isupdate;
    public  GPSTracker(Context context){
        this.context = context;
        isupdate = false;
        new Thread(new Runnable() {
            @Override
            public void run() {
                check();
            }
        });
    }

    void check(){
        // Get the location manage
        locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        provider = locationManager.getBestProvider(criteria, false);
        location = locationManager.getLastKnownLocation(provider);

        // Initialize the location fields
        if (location != null) {
            onLocationChanged(location);
            isupdate = true;
        }

    }
    @Override
    public void onLocationChanged(Location location) {
        this.lat = String.valueOf(location.getLatitude());
        this.lng = String.valueOf(location.getLongitude());
    }

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

    }

    @Override
    public void onProviderEnabled(String provider) {

    }

    @Override
    public void onProviderDisabled(String provider) {

    }

    public Context getActivity() {
        return context;
    }
}

这是清单文件权限

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

【问题讨论】:

    标签: android android-studio gps


    【解决方案1】:

    GPSTracker 坏了。永远不应该使用它。它是多年前在这里投票的,当时人们刚接触位置跟踪,并没有意识到其中的细微错误。但它不应该再使用了。它被设计破坏到修复它会使它成为一个完全不同的库的地步。特别是 - 它将启用的提供程序与实际具有值混淆,并假定 getLastKnownLocation 将返回值,而实际上它可能没有。

    看看我在here 发布的 ProviderLocationTracker 和 FallbackLocationTracker 类。它们提供了一个 API,可让您准确地告诉是否某个位置存在,并修复了 GPSTracker 中的各种其他错误。

    【讨论】:

      猜你喜欢
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多