درخواست های ارتباط
جستجو
لیست دوستان من
صندوق پیام
همه را دیدم
  • در حال دریافت لیست پیام ها
صندوق پیام
رویدادها
همه را دیدم
  • در حال دریافت لیست رویدادها
همه رویدادهای من
تخفیف های وب سایت
همه تخفیف ها

ارسال لوکیشن با استفاده از Service ها دراندروید

نویسنده متن پست
پاسخ به این پست
author
AMHMI
امیرحسین میرزایی
1398/01/25 04:01:23
سلام به تمامی برنامه نویسان اندروید؛
من میخوام یک برنامه ردیابی برای اندروید بنویسم که اگه کاربر از برنامه بیرون اومد همچنان اطلاعات مکانیو دریافت کنه و داخل بانک ذخیره کنه.
کد هایی که نوشتم
داخل کلاس MainActivity
public class MainActivity extends AppCompatActivity implements LocationListener {
Intent IntentMyIntentService;
@Override
    protected void onCreate(Bundle savedInstanceState) {
IntentMyIntentService=new Intent(MainActivity.this, MyLocationService.class);
                startService(IntentMyIntentService);
}


یک دکمه گذاشتم و گفتم زمانی که بر روی دکمه کلیک شد، سرویس مورد نظر از داخل Intent اجرا شود وداخل کلاس سرویس هم کد های زیر نوشتم:
public class MyLocationService extends Service {
    private static final String TAG = "MyLocationService";
    private LocationManager mLocationManager = null;
    private static final int LOCATION_INTERVAL = 1000;
    private static final float LOCATION_DISTANCE = 1f;
    private ThreadGroup threadGroup = new ThreadGroup("ServiceThreadGroup");
    String lat;
    String longi;

    private class LocationListener implements android.location.LocationListener, Runnable {
        Location mLastLocation;

        public LocationListener(String provider) {
            Log.e(TAG, "LocationListener " + provider);
            mLastLocation = new Location(provider);
            lat = "" + mLastLocation.getLatitude();
            longi = "" + mLastLocation.getLongitude();
        }

        public LocationListener(int counter, int startId) {

        }

        @Override
        public void onLocationChanged(Location location) {
            Log.e(TAG, "onLocationChanged: " + location);
            mLastLocation.set(location);
            if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
                    ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                
                return;
            }
            mLocationManager.requestLocationUpdates(
                    LocationManager.PASSIVE_PROVIDER,
                    LOCATION_INTERVAL,
                    LOCATION_DISTANCE,
                    mLocationListeners[0]);
            lat=""+mLastLocation.getLatitude();
            longi=""+mLastLocation.getLongitude();
        }

        @Override
        public void onProviderDisabled(String provider) {
            Log.e(TAG, "onProviderDisabled: " + provider);
        }

        @Override
        public void onProviderEnabled(String provider) {
            Log.e(TAG, "onProviderEnabled: " + provider);
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            Log.e(TAG, "onStatusChanged: " + provider);
        }

        @Override
        public void run() {

            try {
                while (true) {
                    Log.e(TAG, "Run is run ");
                    Log.e(TAG,"lat is : "+lat);
                    Log.e(TAG,"long is : "+longi);
                    Thread.sleep(3000);

                }
            } catch (InterruptedException e) {
                Log.e(TAG, "Run is run ");
            }
        }
    }

   

    LocationListener[] mLocationListeners = new LocationListener[]{
            new LocationListener(LocationManager.PASSIVE_PROVIDER)
    };

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.e(TAG, "onStartCommand");
        super.onStartCommand(intent, flags, startId);

        int counter = intent.getIntExtra("Counter", 0);
        new Thread(threadGroup, new LocationListener(counter, startId), "ServiceThread").start();

        return START_STICKY;
    }

    @Override
    public void onCreate() {

        Log.e(TAG, "onCreate");

        initializeLocationManager();

        try {
            mLocationManager.requestLocationUpdates(
                    LocationManager.PASSIVE_PROVIDER,
                    LOCATION_INTERVAL,
                    LOCATION_DISTANCE,
                    mLocationListeners[0]
            );
        } catch (java.lang.SecurityException ex) {
            Log.i(TAG, "fail to request location update, ignore", ex);
        } catch (IllegalArgumentException ex) {
            Log.d(TAG, "network provider does not exist, " + ex.getMessage());
        }

       
    }

    @Override
    public void onDestroy() {
        Log.e(TAG, "onDestroy");
        super.onDestroy();
       
    }

    private void initializeLocationManager() {
        Log.e(TAG, "initializeLocationManager - LOCATION_INTERVAL: "+ LOCATION_INTERVAL + " LOCATION_DISTANCE: " + LOCATION_DISTANCE);
        if (mLocationManager == null) {
            mLocationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
        }
    }
}

همه چیز کار میکنه و عالیه، زمانی که از برنامه بیرون میام یا به اصطلاح ondestroy() میزنم یا همون دکمه Home برنامه میزنم، برنامه stop نمیشه و به کار خودش ادامه میده، خب تا اینجا ظاهرا همه چیز خوبه! اما وقتی لوکیشن برنامه عوض میشه، اطلاعات نمایشی برای طول و عرض جغرافیایی تغییر نمیکنه! انگار دستورات داخل متد run فقط اجرا میشوند، ولی من میخوام onLocationChanged هم اجرا بشه و تغییر کنه.
اگ میشه راهنماییم کنین، ممنون.

برای ارسال پست ابتدا به سایت وارد شوید

مطالب مرتبط

در حال دریافت اطلاعات

عضویت در

کانال تلگرام

توسینسو

دوره های پیشنهادی

دوره های توسینسو ساخت و مدیریت ربات تلگرام از صفر با زبان سی شارپ
ساخت و مدیریت ربات تلگرام از صفر با زبان سی شارپ
مدرس: مهدی عادلی فر
این دوره را در 2 قسط خریداری کنید
دوره آموزشی برنامه نویسی WPF در ویژوال استودیو
دوره آموزشی برنامه نویسی WPF در ویژوال استودیو
مدرس: امیر حسین فضلیخانی
این دوره را در 12 قسط خریداری کنید
دوره آموزشی برنامه نویسی به زبان پرل بصورت پروژه محور
دوره آموزشی برنامه نویسی به زبان پرل بصورت پروژه محور
مدرس: ایمان جوادی
این دوره را در 13 قسط خریداری کنید
دوره آموزشی مقدماتی برنامه نویسی به زبان سی شارپ
دوره آموزشی مقدماتی برنامه نویسی به زبان سی شارپ
مدرس: حسین احمدی
این دوره را در 17 قسط خریداری کنید
دوره آموزشی اسکریپت نویسی Batch یا Batch Scripting در ویندوز به زبان ساده
دوره آموزشی اسکریپت نویسی Batch یا Batch Scripting در ویندوز به زبان ساده
مدرس: حسین احمدی
این دوره را در 11 قسط خریداری کنید
دوره آموزشی پردازش متن با زبان برنامه نویسی پایتون
دوره آموزشی پردازش متن با زبان برنامه نویسی پایتون
مدرس: کاظم تقندیکی
این دوره را در 20 قسط خریداری کنید
دوره آموزشی برنامه نویسی پیشرفته زبان سی شارپ
دوره آموزشی برنامه نویسی پیشرفته زبان سی شارپ
مدرس: حسین احمدی
این دوره را در 78 قسط خریداری کنید
دوره متوسطه برنامه نویسی به زبان جاوا به زبان ساده
دوره متوسطه برنامه نویسی به زبان جاوا به زبان ساده
مدرس: مهدی عادلی فر
این دوره را در 18 قسط خریداری کنید
دوره آموزشی برنامه نویسی مقدماتی پایتون به زبان ساده
دوره آموزشی برنامه نویسی مقدماتی پایتون به زبان ساده
مدرس: حسین احمدی
این دوره را در 23 قسط خریداری کنید
دوره آموزشی مقدماتی برنامه نویسی جاوا به زبان ساده
دوره آموزشی مقدماتی برنامه نویسی جاوا به زبان ساده
مدرس: مهدی عادلی فر
این دوره را در 17 قسط خریداری کنید
دوره آموزشی برنامه نویسی اندروید با زبان جاوا به زبان ساده
دوره آموزشی برنامه نویسی اندروید با زبان جاوا به زبان ساده
مدرس: مهدی عادلی فر
این دوره را در 27 قسط خریداری کنید
دوره آموزشی طراحی رابط کاربری با JavaFX
دوره آموزشی طراحی رابط کاربری با JavaFX
مدرس: حسام رسولیان
این دوره را در 13 قسط خریداری کنید
دوره تخصصی آموزش متن کاوی با ابزار NLTK
دوره تخصصی آموزش متن کاوی با ابزار NLTK
مدرس: کاظم تقندیکی
این دوره را در 11 قسط خریداری کنید
دوره آموزشی ساخت ربات تلگرام
دوره آموزشی ساخت ربات تلگرام
مدرس: کاظم تقندیکی
این دوره را در 8 قسط خریداری کنید
دوره آموزشی Exploit نویسی به زبان Perl
دوره آموزشی Exploit نویسی به زبان Perl
مدرس: ایمان جوادی
این دوره را در 7 قسط خریداری کنید
تاپیک های پربازدید