آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

نحوه دریافت طول و عرض جغرافیایی از GPS

احسان منصوری  9 سال پیش  8 سال پیش
+3 0

سلام دوستان. 

چطوری میتونم وقتی رو یه دکمه ای کلیک شد، مختصات اون شخص(طول و عرض جغرافیایی) رو از GPS دریافت کنم؟

من توی یکی از اکتیویتی هام، از GPS استفاده کردم و روی نقشه مسیریابی آفلاین انجام میدم ولی اگه GPS خاموش باشه، کرش میکنه چون اون اکتیویتی implements شده از LocationListener.

حالا میخوام فقط وقتی روی دکمه کلیک شد، مختصات جغرافیایی رو دریافت کنم

 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
امیرعلی  9 سال پیش
+5 0

از کد زیر می تونید استفاده کنید: 

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




+1 0
البته این کد یک مشکل داره که من هنوز نتونستم برطرفش کنم: زمانیکه کاربر در مکانی باشه که gps براش کار نکنه ( مثلا در مکانهای مسقف یا مترو یا ...) اپلیکیشن یک عدد غلط براش تولید میکنه. درستش اینه که به کاربر پیغام بده : " قادر به پیدا کردن مکان شما نیست". (9 سال پیش)
0 0
ممنونم امیرعلی جان. درست شد. چجوری میتونم این کد رو توی یه کلاس (مثلا کلاس G) بنویسم که توی همه اکتیویتی هام ازش استفاده کنم؟ اینهمه کد رو توی همه اکتیویتی هام تکرار کنم که درست نیست. آخه میخوام بعد از اینکه لوکیشن رو پیدا کرد، بره به اکتیویتی دیگه (9 سال پیش)
0 0
آقا من از این کد که استفاده می کنم به محض کلیک روی دکمه برنامه کرش میکنه و از دستور locationManager.requestLocationUpdates ایراد میگیره باید چه ار کنم؟ (9 سال پیش)
0 0
آقا دمت گرم. بعد از کلی جستجو جواب درستی پیدا نکردم. روش شما داره به درستی کار میکنه. (8 سال پیش)
پاسخ به سوال 
red_sky  9 سال پیش
0 0

سلام

من از این کدها استفاده کردم چون من هم مثل دوستمون فقط داخل یکی از اکتیویتی هام از gps استفاده میکنم و با زدن روی دکمه باید طول و عرض جغرافیایی را به دست بیارم چون سوالم با این سوال مرتبط بود دیگه یک سوال جدید ایجاد نکردم

مشکلم اینه که وقتی gps خاموش باشه و وارد برنامه بشم پیغام میده که باید gps را روشن کنی ولی وقتی که gps را روشن میکنم و اگر بار اول باشه که وارد برنامه میشم توی تنظیمات که میرم gps را روشن کنم اسم برنامه من توی لیست برنامه هایی که از gps استفاده میکنه نیست و بعد از روشن کردن gps و برگشت به برنامه و زدن روی دکمه برنامه روی دیالوگ در حال محاسبه... باقی میمونه باید از برنامه خارج بشم و دوباره برنامه را باز کنم تا درست کار کنه به نظرتون مشکل کجاست و چرا برنامه از قبل توی لیست برنامه هایی که باید از gps استفاده کنه وجود نداره؟

یک سوال دیگه هم اینکه من میخوام با خروج از این اکتیویتی دیگه از gps استفاده نشه و این هندلر متوقف بشه امکانش هست؟ میشه راهنمایی کنید؟


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .