نحوه دریافت طول و عرض جغرافیایی از GPS
سلام دوستان.
چطوری میتونم وقتی رو یه دکمه ای کلیک شد، مختصات اون شخص(طول و عرض جغرافیایی) رو از GPS دریافت کنم؟
من توی یکی از اکتیویتی هام، از GPS استفاده کردم و روی نقشه مسیریابی آفلاین انجام میدم ولی اگه GPS خاموش باشه، کرش میکنه چون اون اکتیویتی implements شده از LocationListener.
حالا میخوام فقط وقتی روی دکمه کلیک شد، مختصات جغرافیایی رو دریافت کنم
از کد زیر می تونید استفاده کنید:
public class GoogleMapsActivity extends Activity { private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1000; // in Milliseconds protected Button retrieveLocationButton; ProgressDialog progress; double lat = 0; double lag = 0; boolean flag_gps_on = true; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); retrieveLocationButton = (Button) findViewById(R.id.btn); Log.i("mohsenDel", "" + System.currentTimeMillis()); retrieveLocationButton.setOnClickListener(new View.OnClickListener() { Handler handeler = new Handler(); @Override public void onClick(View v) { final LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, MINIMUM_TIME_BETWEEN_UPDATES, MINIMUM_DISTANCE_CHANGE_FOR_UPDATES, new MyLocationListener() ); progress = ProgressDialog.show(GoogleMapsActivity.this, "", "در حال محاسبه..."); lat = 0; lag = 0; final long milisNow = System.currentTimeMillis(); final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { if (flag_gps_on) { new Thread(new Runnable() { @Override public void run() { while (true) { Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); if (location != null) { lag = location.getLongitude(); lat = location.getLatitude(); break; } if (Math.abs(milisNow - System.currentTimeMillis()) > 6000) break; } if (lat != 0 || lag != 0) { progress.dismiss(); handeler.post(new Runnable() { @Override public void run() { String message = String.format("Current Location \n Longitude: %1$s \n Latitude: %2$s", lat, lag); Toast.makeText(GoogleMapsActivity.this, message, Toast.LENGTH_LONG).show(); } }); } else { progress.dismiss(); handeler.post(new Runnable() { @Override public void run() { Toast.makeText(GoogleMapsActivity.this, "موقعیت شما تشخیص داده نشد.", Toast.LENGTH_LONG).show(); } }); } } }).start(); } } }, 1500); } }); } private class MyLocationListener implements LocationListener { public void onLocationChanged(Location location) { } public void onStatusChanged(String s, int i, Bundle b) { } public void onProviderDisabled(String s) { Toast.makeText(GoogleMapsActivity.this, "لطفا جی پی اس خود را روشن کنید.", Toast.LENGTH_LONG).show(); flag_gps_on = false; try { progress.dismiss(); } catch (Exception e) {} } public void onProviderEnabled(String s) { flag_gps_on = true; } } }
permissions:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
سلام
من از این کدها استفاده کردم چون من هم مثل دوستمون فقط داخل یکی از اکتیویتی هام از gps استفاده میکنم و با زدن روی دکمه باید طول و عرض جغرافیایی را به دست بیارم چون سوالم با این سوال مرتبط بود دیگه یک سوال جدید ایجاد نکردم
مشکلم اینه که وقتی gps خاموش باشه و وارد برنامه بشم پیغام میده که باید gps را روشن کنی ولی وقتی که gps را روشن میکنم و اگر بار اول باشه که وارد برنامه میشم توی تنظیمات که میرم gps را روشن کنم اسم برنامه من توی لیست برنامه هایی که از gps استفاده میکنه نیست و بعد از روشن کردن gps و برگشت به برنامه و زدن روی دکمه برنامه روی دیالوگ در حال محاسبه... باقی میمونه باید از برنامه خارج بشم و دوباره برنامه را باز کنم تا درست کار کنه به نظرتون مشکل کجاست و چرا برنامه از قبل توی لیست برنامه هایی که باید از gps استفاده کنه وجود نداره؟
یک سوال دیگه هم اینکه من میخوام با خروج از این اکتیویتی دیگه از gps استفاده نشه و این هندلر متوقف بشه امکانش هست؟ میشه راهنمایی کنید؟
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .