2017-01-06 7 views
0

緯度と経度が表示されているときはいつでも特定のエラーが表示されます0,0私は物理的には効果が出るように場所を変更しましたが、 、0 ??ここで緯度と経度を取得すると常に0,0 uisng GPS

ここに私の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; 
    } 
} 

するためのコードでGPSTrackerが壊れて

<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" /> 

答えて

3

マニフェストファイルのパーミッションです。それは決して使用すべきではありません。これは何年も前に投票されました。人々が位置追跡を初めて経験し、微妙なバグを認識していなかったときです。しかし、もう使用すべきではありません。それはそれが完全に別のライブラリになることを固定するポイントに設計によって壊れています。特に、有効になっているプロバイダーと実際に値を持つことが混乱し、getLastKnownLocationが値を返さないと仮定しています。

私が掲示したProviderLocationTrackerとFallbackLocationTrackerのクラスをご覧ください。here彼らは正確にに位置を知ることを可能にするAPIを提供し、の場所が存在し、GPSTrackerのさまざまな他のバグを修正します。

関連する問題