با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن . و کاربرانی که دوره کامل آموزش برنامه نویسی اندروید را دنبال می کنند. آندروید به شما اجازه می دهد تا نقشه های گوگل را در اپلیکیشن های خود ادغام کنیم. شما می توانید هر مکانی را بر روی نقشه های گوگل نشان دهید، و یا می توانید مسیر های مختلف را بر روی نقشه های گوگل در اپلیکیشن اندروید خود مشخص کنید، شما همچنین می توانید نقشه ها را با توجه به انتخاب خود سفارشی کنید. برای این منظور در ادامه ی مباحث این بخش در خصوص چگونگی کار با گوگل مپ در برنامه نویسی اندروید با ما همراه باشید.
در این مبحث چگونگی استفاده از گوگل مپ در برنامه نویسی اندروید و متدهای مربوطه را آموزش می دهیم.
همچنین در تکمیل مباحث به یک مثال ساده از بکارگیری گوگل مپ در برنامه نویسی اندروید نیز پرداخته ایم.
ابتدا باید map fragment را در فایل layout برنامه ی خود به صورت زیر اضافه کنید:
1 2 3 4 5 | <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.MapFragment" android:layout_width="match_parent" android:layout_height="match_parent"/> |
در این مرحله باید مجوزهای Google Map API را در فایل AndroidManifest.XML اضافه کنید.
ساختار این به صورت زیر خواهد بود:
1 2 3 4 5 6 7 8 9 10 | <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="com.google.android.providers.gsf.permission. READ_GSERVICES" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyDKymeBXNeiFWY5jRUejv6zItpmr2MVyQ0" /> |
شما به راحتی می توانید google map را در نمای پیش فرض view سفارشی کرده و آن را با توجه به نیاز خود تغییر دهید.
شما می توانید موقعیت مکانی مورد نظر را در map با استفاده از یک text علامتگذاری کنید.
برای این منظور می توانید از متد addMarker() بصورت زیر استفاده کنید:
1 2 3 | final LatLng TutorialsPoint = new LatLng(21 , 57); Marker TP = googleMap.addMarker(new MarkerOptions() .position(TutorialsPoint).title("TutorialsPoint")); |
شما همچنین می توانید نوع MAP را تغییر دهید. چهار نوع نقشه متفاوت وجود دارد و هر کدام از این نقشه ها متفاوت است.
این چهار نوع شامل Normal,Hybrid,Satellite و terrain می شوند، که بصورت زیر قابل دسترسی هستند:
1 2 3 4 | googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN); |
شما می توانید قابلیت زوم صفحه نمایش لمسی را در نقشه با فراخوانی متد setZoomControlsEnabled(boolean)
فعال و یا غیر فعال کنید.
ساختار آن به صورت زیر است:
1 | googleMap.getUiSettings().setZoomGesturesEnabled(true); |
علاوه بر متدهای فوق، متدهای دیگری نیز در کلاس GoogleMap برای سفارشی کردن نقشه ها در دسترس است:
ردیف | متد و توضیحات مربوطه |
---|---|
۱ | addCircle(CircleOptions options) این متد یک دایره را به نقشه اضافه می کند. |
۲ | addPolygon(PolygonOptions options) این متد نیز یک چند ضلعی را ایجاد می کند. |
۳ | addTileOverlay(TileOverlayOptions options) این متد یک قالب کاشی را در نقشه پیاده می کند. |
۴ | animateCamera(CameraUpdate update) این متد نقشه را برای بروزرسانی در قالب یک حرکت انیمیشن جا به جا می کند. |
۵ | clear() این متد هر چیزی را از نقشه پاک می کند. |
۶ | getMyLocation() این متد موقعیت مکانی جاری کاربر را برمی گرداند. |
۷ | moveCamera(CameraUpdate update) این متد دوربین را با توجه به دستورالعمل های تعریف شده در بروز رسانی، تغییر می دهد. |
۸ | setTrafficEnabled(boolean enabled) این متد لایه ترافیک را روشن یا خاموش می کند. |
۹ | snapshot(GoogleMap.SnapshotReadyCallback callback) این متد یک عکس فوری از نقشه می گیرد. |
۱۰ | stopAnimation() این متد اگر انیمیشن دوربین در حال انجام باشد آن را متوقف می کند. |
در اینجا به یک نمونه از استفاده از کلاس GoogleMap در قالب یک برنامه می پردازیم.
این برنامه M را ایجاد می کند که به شما اجازه می دهد تا از طریق نقشه حرکت کنید.
برای آزمایش این مثال، شما می توانید این را روی یک دستگاه واقعی یا یک شبیه ساز اجرا کنید.
یک پروژه با google maps activity به صورت زیر در اندروید استدیو ایجاد کنید:
اقدام فوق پنجره ی زیر را ظاهر می کند، سپس کد API Key که در تصویر زیر مشخص شده را کپی کنید.
سپس این کد را در مرورگر خود همانطور که در زیر نشان داده شده کپی کنید:
روی continue کلیک کرده و سپس روی کلیک کنید:
محتوای فایل activity_main.xml:
1 2 3 4 5 6 7 8 | <fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:map="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.Pvlearn.myapplication.MapsActivity" /> |
محتوای فایل MapActivity.java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | package com.example.Pvlearn.myapplication; import android.support.v4.app.FragmentActivity; import android.os.Bundle; 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.LatLng; import com.google.android.gms.maps.model.MarkerOptions; public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { private GoogleMap mMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); // Obtain the SupportMapFragment and get notified when the map is ready to be used. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; // Add a marker in Sydney and move the camera LatLng TutorialsPoint = new LatLng(21, 57); mMap.addMarker(new MarkerOptions().position(TutorialsPoint).title("Tutorialspoint.com")); mMap.moveCamera(CameraUpdateFactory.newLatLng(TutorialsPoint)); } } |
محتوای فایل AndroidManifest.xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.Pvlearn.myapplication"> <!-- The ACCESS_COARSE/FINE_LOCATION permissions are not required to use Google Maps Android API v2, but you must specify either coarse or fine location permissions for the 'MyLocation' functionality. --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <meta-data android:name="com.google.android.geo.API_KEY" android:value="AIzaSyAXhBdyKxUo_cb-EkSgWJQTdqR0QjLcqes" /> <activity android:name=".MapsActivity" android:label="@string/title_activity_maps"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> |
حالا خروجی برنامه به صورت زیر خواهد بود:
اندروید به شما اجازه می دهد که از قابلیت های گوگل مپ در اپلیکیشن های خود در اندروید استفاده کرده و نقشه های گوناگون گوگل را نمایش دهید، کافیست که طریقه ی کار با گوگل مپ در برنامه نویسی اندروید را طبق مباحث ارائه شده در این بخش یاد بگیرید.
در بخش بعدی به افکت های تصویر در اندروید می پردازیم.