القائمة الرئيسية

الصفحات

التعامل مع Map #3 : شرح كيف يمكنك تحديث بيانات موقع المستخدم بواسطة برنامج اندرويد ستوديو .

 

التعامل مع Map #3 : شرح كيف يمكنك تحديث بيانات موقع المستخدم بواسطة برنامج اندرويد ستوديو .


تطوير تطبيقات الاندرويد - كيفية تحديث وتتبع موقع المستخدم باستخدام برنامج اندرويد ستوديو


مرحبا بكم متابعي شروحات تطوير تطبيقات الاندرويد هذا هو الدرس الثالث من دروس التعامل مع الخرائط باستخدام اندرويد ستوديو من سلسلة تطوير تطبيقات الموبايل اوشك كورس تعلم تطوير تطبيقات الهواتف الذكية بواسطة برنامج اندرويد ستوديو باستخدام برمجة جافا على الانتهاء حيث بقي لنا القليل على انتهاء الكورس المجاني وهذا الكورس كفيل بان يعلمك كل شيئ في الاندرويد ستوديو , يمكنك التوجة الى قسم android studio لكي تجد هنا شروحات في تطوير تطبيقات الاندرويد حاول تبدء من البدايه وستجد ان الامر غير معقد وبسيط .


في هذا المقال سوف نتعرف على كيفية تحديث موقع المستخدم بواسطة برنامج اندرويد ستوديو وتخزين موقعه داخل قاعدة البيانات firebase > fireStore , حيث قد سبق لنا وان شرحنا لكم الفايربيز بالتفصيل وصنعنا معكم تطبيقات بسيط , الفكرة من الاكواد الموجوده اليوم انها سوف تخزن اي حركة لموقع المستخدم في قواعد البيانات لكي تستطيع الحصول على موقعه وفي الدروس القادمة سوف نتعرف على كيفية اظهار الموقع على خرائط جوجل .


يسعى موقع جي كودرس الى تقديم شروحات مستمر في دروس تطوير تطبيقات الاندرويد وايضا الامر لا يقتصر على تطوير تطبيقات الموبايل بل يوجد لدينا كثير من اللغات البرمجية المتنوعه التي سوف تساعدك على تحسين مستواك البرمجي ومن هذة اللغات هي لغة جافا ولغة بايثون وغيرها من اللغات الكثيره ودائما نحاول تقديم افضل ما لدينا لكي ننشر علم البرمجة لدى الجميع بالمجان ونركز بشكل كبير على تطوير تطبيقات الجوال ولكن قبل ان تبدء بهذا المجال حاول اختيار لغة تريد العمل بها سواء جافا او كوتلن لاننا في هذة المرحله يكون الشروحات للنيتف وبعد الانتهاء من هذه الدورة سوف يكون لدينا شروحات داخل فلاتر باذن الله .


يمكنك تعلم مهارة تطوير تطبيقات الاندرويد والتطور فيها حيث ان فرص العمل في هذا المجال مطلوبة بكثرة ولكن لكي تعمل في شركة تطوير تطبيقات الجوال او اي شركة خاصة بي تطوير تطبيقات سواء كانت تطبيقات سطح مكتب او جوال يجب ان تختار القسم الذي يعجبك وابدء العمل ولا تقلق جميع الاقسام مطلوبه وبقوة في سوق العمل وبرنامج اندرويد ستوديو المقدم لنا من جوجل يساعدنا في تصدير و تطوير تطبيقات الاندرويد ونشرها بشكل مجاني ويمكنك الربح من خلال تطبيقاتك مبالغ ماليه محترمه جدا , ولكن لا تفكر في المال قبل المهاره .


كيفية تحديث موقع المستخدم وتخزينه في قواعد بيانات داخل اندرويد ستوديو " فاير بيز "


قم اولا بتعريف LocationRequest وجعلها global , وقم بإضافات الاكواد التالية اسفل onCreate وهي اكواد ببساطه setInterval و setFastestInterval عباره عن وقت اماا setPriority مسؤول عن الحصول على العنوان بدقة عالية .



الاكواد الموجوده بالصورة


    private LocationRequest locationRequest;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        locationRequest = LocationRequest.create();
        locationRequest.setInterval(4000);
        locationRequest.setFastestInterval(2000);
        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        


قم بتعطيل firestore الموجود في فانكشن getLastLocation التي قد سبق وان قدمناها لكم في الدرس السابق والتي كانت مسؤوله عن ايجاد موقع المستخدم وتخزينه داخل قواعد بيانات , لاننا سوف نقوم بتحديد موقع المستخدم ونعمل على تحديثه عندما يتحرك .



قم بإنشاء فانكشن او ميثود جديده باسم cheackSetSettingAndStartLocation وهي ببساطة للتاكد من سلامة اعدادات الموقع الخاصه بالمستخدم وعندما تكون اعداد التطبيق جيده سوف يقوم بإستدعاء دالة startLocationUpdate والتي سوف نقوم بإنشائها بعد قليل واذا فشلت سوف نقوم بطباعة الرسالة داخل logi وايضا بشكل Toast للمستخدم .



الاكواد الموجوده بالصورة


    private void cheackSetSettingAndStartLocation() {
        LocationSettingsRequest locationSettingsRequest = new LocationSettingsRequest.Builder()
               .addLocationRequest(locationRequest).build();
        SettingsClient settingsClient = LocationServices.getSettingsClient(this);

        Task<LocationSettingsResponse> locationSettingsRequestTask = settingsClient.checkLocationSettings(locationSettingsRequest);

        locationSettingsRequestTask.addOnSuccessListener(new OnSuccessListener<LocationSettingsResponse>() {
            @Override
            public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
                startLocationUpdate();
            }
        }).addOnFailureListener(new OnFailureListener() {

            @Override
            public void onFailure(@NonNull Exception e) {
                String error = e.getMessage();
                Log.i(TAG, "onFailure 2: " + error);
                Toast.makeText(MainActivity.this, error, Toast.LENGTH_SHORT).show();
            }
        });
    }
    


الان قم بعمل LocationCallback وهي انك سوف تخرج من الفانكشن وتكتب الكود الخاص به وهذا يعد اهم شيئ في كود اليوم لان التعديل سوف يكون منه بكل بساطه في البدايه تاكد ان locationResult غير فارغ حيث لو كان فارغ تظهر لك رساله the location is null وقم بعمل return لكي لا ينتقل الى الكود التالي الا اذا حقق الشرط , عندما يحقق الشرط سوف يقوم بعمل for لـ Location لكي يكرر العنوان الجديد الذي سوف يظهر للمستخدم ويخزنه في قاعدة البيانات , بعدها قمت بعمل TextView لكي تظهر الاحداثيات ايضا في نص داخل التطبيق , بعدها قمت بعمل HashMap لكي ارسل البيانات يمكنك عمل Map او HashMap لا يوجد فرق شاسع تقريبا , اخيرا قم بعمل مجلد داخل الفايرستور يقوم بتخزين عنوان المستخدم وجعله currentTimeMillis وهذا يقول بتحويل الوقت الى ميلي ثانية وبعدها ارسلت البيانات للفايربيز



الكود الموجود بالصورة 


    LocationCallback locationCallback = new LocationCallback() {

        @Override
        public void onLocationResult(@NonNull LocationResult locationResult) {
            super.onLocationResult(locationResult);
            if (locationResult == null) {
                Log.i(TAG, "onLocationResult: the location is null");
                return;
            }
            for (Location location : locationResult.getLocations()) {
                Log.i(TAG, "onLocationResult: " + location.toString());

                String msg = "Lat : " + location.getLatitude() + " ,log : " + location.getLongitude();
                ((TextView) findViewById(R.id.text_location)).setText(msg);
                    HashMap<String, String> locationMap = new HashMap<>();
                    locationMap.put("location", location.getAltitude() + "," + location.getLongitude());
                firestore.collection("location").document(String.valueOf(System.currentTimeMillis()))
.set(locationMap);

            }
        }
    };
    



الان قم بعمل ميثود startLocationUpdate وقم بعمل بداخلها requestLocationUpdates وهو ياخذ 3 انواع من perimeter وهم locationRequest و locationCallback و Looper.getMainLooper واللوبر له علاقه بالثريد - Thread وسوف يشرح في الدروس القادمه .



الكود السابق


private void startLocationUpdate() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
        }

        fusedLocationProviderClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper());
    }
    



ايضا ميثود اخرى مسؤوله على removeLocationUpdates عمل عندما يتم الايقاف ولكن لا تنسى ان تستدعيها في onStop والكود الخاص بها التالي



الكود الموجود بالصورة 


    private void stopLocationUpdate() {
      fusedLocationProviderClient.removeLocationUpdates(locationCallback);
    }
    


في النهايه قم بتشغيل ميثود cheackSetSettingAndStartLocation داخل onStart عندما يتم الحصول على عنوان المستخدم وبداخل onRequestPermissionsResult عندما نحصل على النتيجة



تطوير تطبيقات الموبايل ليس بالامر السهل ولكنه ممتع اذا احببته ونحن في جي كودرس نحاول وبقدر الامكان تبسيط الامور عليكم لكي تستطيع تطوير تطبيقات الهواتف الذكية بسهوله وقد تعمل في شركة تطوير تطبيقات الجوال بسبب تطورك وحبك في البرمجه , لذلك لا تبخل علينا بالنشر في كل مكان لكي يستطيع الجميع تعلم البرمجة بسهوله ويصبح لدينا شباب عربي قادر على تطوير تطبيقات الاندرويد .


للمزيد من دروس تطوير تطبيقات الجوال او تطوير تطبيقات الاندرويد




رابط المشروع كامل على جيت هب - github



التنقل السريع