تطبيق حديقة حيوانات بإستعمال Android و Google Maps الجزء السادس

imadbelasri Android
AN

فهاد الجزء السادس والأخير من تطبيق حديقة حيوانات بإستعمال Android و Google Maps غادي نكملو الملفات الأخيرة الخاصة باسترجاع المواقع على الخريطة و غادي نشوفو كيفاش نحصلو على المفتاح الخاص بنا باش يمكن نخدمو بخرائط غوغل.


نظرة سريعة بالفيديو


- الملف ZooMapFragment.java

ف app/src/main/java/fragments كنزيد ملف كنسميه ZooMapFragment.java ف onMapReady كنحدد الموقع الأولي لي غادي تعتمدو الخريطة من بعد كنحدد النوع ديال الخريطة و كان نفعل الزووم فالخريطة ثم كنخدم ب RestAdapter لي هي class ديال retrofit كنعطيها الرابط لي فيه الملف en ligne من بعد كاين PlacesApiInterface لي ب fonction getPlaces كنسترجع المواقع من الملف فمنبعد كنتحقق من الجواب يلا فارغ كنرجع null مكانش كنزيد كل موقع فل MarkerOptions لي كتمكن من عرض الرمز الأزرق الخاص بكل موقع ثم كنزيد فالخريطة هاد الرموز فالآخر كاين setOnMarkerClickListener لي فقط كتعرض الإسم ديال الموقع ملي كيظغط المستخدم على الرمز الأزرق الكود ديال الملف هو :

                                                    
                                                        package fragments;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View;

import com.example.darijacoding.annoncesapp.R;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

import java.util.List;

import models.Animal;
import models.Place;
import retrofit.Callback;
import retrofit.RestAdapter;
import retrofit.RetrofitError;
import retrofit.client.Response;
import utils.PlacesApiInterface;

/**
 * Created by Imad on 22/02/2017.
 */
public class ZooMapFragment extends SupportMapFragment implements OnMapReadyCallback {
    public static ZooMapFragment getInstance(){
        ZooMapFragment fragment = new ZooMapFragment();
        return fragment;
    }
    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        getMapAsync(this);
    }

    @Override
    public void onMapReady(final GoogleMap googleMap) {
        CameraPosition position =  CameraPosition.builder().target(new LatLng(33.955304,-6.89435))
                .zoom(16f)
                .bearing(0.0f)
                .tilt(0.0f)
                .build();
        googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(position),null);
        googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
        googleMap.setTrafficEnabled(true);
        googleMap.getUiSettings().setZoomControlsEnabled(true);
        googleMap.setIndoorEnabled(true);
        RestAdapter adapter = new RestAdapter.Builder().setEndpoint(getString(R.string.url)).build();
        PlacesApiInterface placesApiInterface = adapter.create(PlacesApiInterface.class);
        placesApiInterface.getPlaces(new Callback<List<Place>>() {
            @Override
            public void success(List<Place> places, Response response) {
                if(places == null && places.isEmpty()){
                    return;
                }
                for(Place place:places) {
                    MarkerOptions options = new MarkerOptions().position(new LatLng(place.getLatitude(),place.getLongitude()));
                    options.title(place.getName());
                    Log.d("Latitude :",String.valueOf(place.getLatitude()));
                    Log.d("Longitude :",String.valueOf(place.getLongitude()));
                    options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE));
                    googleMap.addMarker(options);
                }
            }
            @Override
            public void failure(RetrofitError error) {
                Log.d("Erreur :",error.getMessage());
            }
        });
        googleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {
                marker.showInfoWindow();
                return true;
            }
        });
    }
}

                                                    
                                                

- الملف strings.xml

فباش تخدم بخرائط غوغل لازم ما توفر على clé فباش تحصل عليه كتمشي لhttps://console.developers.google.com من بعد Bibliothèque ثم Google Maps Android API منبعد Activer Api منبعد كليكي على Identifiants ثم créer des Identifiants ثم clé api ملي كيتزاد كتكليكي عليه كتختار Applications Android منبعد كتكليكي على ajouter nom de package فNom de package كتزيد سمية الباكاج ديال المشروع ديالك ثم كتمشي فين عندك java installé غالبا غادي يكون C:\Program Files\Java منبعد غادي تفتح cmd وتكتب cd C:\Program Files\Java ثم تدير كوموند اخرى cd jdk\bin منبعد تزيد الكوموند لي غادي تعطيك ل empreinte ولي هي keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android ويلا كان عندك system os|linux شوف الكوموند من هنا :https://developers.google.com/maps/documentation/android-api/signup منبعد مكتنفد كتاخد الكود لي فالسطر sha1 وتزيدو فالحقل Empreinte du certificat SHA-1 وتكليكي enregistrer من بعد كتهز لclé ديالك وغادي تزيدو فالملف values/strings.xml ولي الكود ديالو هو:

                                                        
                                                            <resources>
    <string name="app_name">Zoo</string>
    <string name="navigation_drawer_open">Open navigation drawer</string>
    <string name="navigation_drawer_close">Close navigation drawer</string>
    <string name="url">http://auth.freeoda.com</string>
    <string name="action_settings">Paramétres</string>
    <string name="google_maps_key">Votre clé</string>
</resources>
                                                        
                                                    

- الملف AndroidManifest.xml

فآخر حاجة غادي نزيدوها باش التطبيق ديالنا يخدم بشكل صحيح هي فالملف AndroidManifest.xml غادي نزيد الكود لي كيمكن التطبيق من استخدام الأنترنيت والمواقع ثم كنزيد الكود لي كيحدد لكل صفحة الصفحة الأم ديالها باش مني المستخدم يكليكي على زر الرجوع يرجع للصفحة الأم ثم كاين المفتاح لي كيمكن من استخدام خرائط غوغل ولي كنجبدو من الملف strings.xml الكود المعدل ديال الملف هو:

                                                        
                                                            <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.darijacoding.annoncesapp">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar"
            android:launchMode="singleTop"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".AnimalDetailsACTIVITY"
            android:parentActivityName=".MainActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity" />
        </activity>
        <activity android:name=".GalleryDetailsActivity" android:parentActivityName=".MainActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity" />
        </activity>
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="@string/google_maps_key"/>
    </application>

</manifest>
                                                        
                                                    

- الملفات لي en ligne

فالبنسبة للملفات لي فالسيرفور يمكنلك تدخلهم من الروابط لي لتحت كما يمكنلك تاخدهم عندك والتطبيق راه يمكنلك تغير المحتوى ديالو على حساب التطبيق لي بغيتي تصاوب الروابط هي:

                                                        
                                                            http://auth.freeoda.com/Exhibits.json.
http://auth.freeoda.com/gallery.json.
http://auth.freeoda.com/Pins.json.