دقت پایین مکان یابی با اینترنت سیم کارت
سلام دوستان وقت بخیر
همون طور که اطلاع دارید در برنامه نویسی اندروید به ۲ طریق می توان به محدوده جغرافیایی کاربر دسترسی داشت:
۱-از طریق ماهواره GPS_Provider
۲-از طریق شبکه اینترنت Network_provider
که انتخاب بنده به دلیل سرعت بیشتر دریافت اطلاعات، Network_provider بود. مشکل اصلی دقت اطلاعات دریافت شده است ، یعنی زمانی که تلفن همراه با wifi به اینترنت متصل میشود ، اطلاعات محدوده جغرافیایی تقریبا دقیق است و نرخ خطای پایینی دارد اما زمانی که تلفن همراه با اینترنت سیمکارت ، متصل می شود دقت اطلاعات به طور عجیبی پایین است و آدرس هایی بازگردانده شده بسیار دور تر از مکان اصلی است.(نرخ خطا در اپراتور های مختلف ، متفاوت است)
چندین کتابخانه را نیز امتحان کردم اما تاثیری یافت نشد.
آیا روشی برای بهبود آدرس یابی از طریق اینترنت سیمکارت وجود دارد؟
public class Get_Location extends Service {
private LocationListener Listener;
private LocationManager locationManager;
Location location_pub;
String s;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
ctx = this;
startService();
Listener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
//location.setAccuracy((float) 10.0);
String d=location.getExtras()+" "+location.getTime()+" "+location.getElapsedRealtimeNanos()+" "
+location.getAltitude()+" "+location.getBearing()+" "+location.getSpeed()+" "+location.getProvider();
Log.e("net_loc", location.getLatitude() + " " + location.getLongitude());
double myLat = 0;
double myLong = 0;
Log.d("getAccuracy()",d+"");
myLat = location.getLatitude();
myLong = location.getLongitude();
Geocoder gcd = new Geocoder(getBaseContext(), Locale.getDefault());
List<Address> addresses = null;
try {
addresses = gcd.getFromLocation(myLat, myLong, 1);
} catch (IOException e) {
e.printStackTrace();
}
try {
String address = addresses.get(0).getAddressLine(0); // If any
String city = addresses.get(0).getLocality();
String state = addresses.get(0).getAdminArea();
String country = addresses.get(0).getCountryName();
String postalCode = addresses.get(0).getSubLocality();
// getSubLocality();
String knownName = addresses.get(0).getFeatureName();
s = myLong + "\n" + myLat + "\n "+location.getAccuracy() +"\n "+ knownName + "\n --------------------------------";
Log.e("GPS", s + "");
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}
};
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission
(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
}
locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 3000, 0, Listener);
}
@Override
public void onDestroy() {
super.onDestroy();
if (locationManager != null) {
locationManager.removeUpdates(Listener);
}
}
استفاده از LocationManager دیگه این روز ها توصیه نمیشه و به جاش کار با گوگل پلی سرویس و استفاده از API ای هست که به ما داده. در واقع بهترین موقعیت ممکن رو براتون به دست میاره.
https://developer.android.com/training/location/index.html
در لینک بالا نحوه راه اندازی و استفاده ازش به طور کامل توضیح داده شده. (قند شکن میخواد).
مشکلی بود در خدمتم.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .