آموزش به دست آوردن موقعیت فعلی در Google Map
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش به دست آوردن موقعیت فعلی در Google Map در برنامه نویسی اندروید می پردازیم آموزش های مختلفی در مورد کار کردن با Google Map قرار دادیم امروز در صدد برآمدیم تا آموزش به دست آوردن موقعیت فعلی کاربر را در Google Map آموزش دهیم در ادامه می توانید پیش نمایشی از این آموزش را مشاهده کنید با ما همراه باشید.
می توانید از آموزش های قبلی ما نیز استفاده کنید.
آموزش رسم مسیر و محاسبه فاصله بین دو مکان در Google Maps
آموزش کار با نقشه (Google map) در برنامه نویسی اندروید
زمانی که مثل بالا بروی Google Maps Activity کلیک کنید و آن را ایجاد کنید سه فایل به پروژه شما اضافه می شود که عبارتند از :
google_maps_api.xml : که در مسیر res/values قرار دارد و باید در آن Api Key خودتان را قرار دهید (آموزش های قبلی برای اطلاعات بیشتر نگاه کنید)
MapsActivity.java : باید کد مربوط به نقشه را در آن بنویسیم یکسری کد به صورت پیشفرض در آن وجود دارد.
activity_maps.xml : که نقشه در آن وجود دارد.
وارد AndroidManifest.xml شده و بررسی کنید دسترسی های زیر وجود دارد یا خیر اگر نبود اضافه کنید
1 2 3 4 5 | <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.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> |
تمامی دسترسی های بالا لازم است.
1 2 3 | <meta-data android:name="com.google.android.geo.API_KEY" android:value="@string/google_maps_key"/> |
دقت کنید باید در فایل build.gradle کتاب خانه زیر اضافه شده باشد.
1 | compile ‘com.google.android.gms:play-services:6.5.87’ |
ممکن است نسخه آن فرق کنید آن را تغییر ندهید .
حالا می خواهییم یکسری تغییرات در فایل های که از قبل وجود داشته اعمال کنیم !
ابتدا وارد activity_maps.xml شده و کدهای زیر را به جای کدهای قبلی قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_marginBottom="4dp" android:layout_weight="1" > <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.MapFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> <ImageView android:id="@+id/iv" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/transparent" /> </RelativeLayout> |
سپس وارد اکتیویتی MapsActivity.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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | public static class MapsActivity extends Fragment implements GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener, LocationListener { GoogleMap map; LatLng latlng; private LocationRequest lr; private LocationClient lc; MapFragment mapFragment; ImageView iv; private static View view; public MapsActivity() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (view != null) { ViewGroup parent = (ViewGroup) view.getParent(); if (parent != null) parent.removeView(view); } try { view = inflater.inflate(R.layout.activity_maps, container, false); mapFragment = ((MapFragment) this.getActivity() .getFragmentManager().findFragmentById(R.id.map)); iv = (ImageView) view.findViewById(R.id.iv); map = mapFragment.getMap(); map.getUiSettings().setAllGesturesEnabled(false); map.getUiSettings().setMyLocationButtonEnabled(false); map.setMyLocationEnabled(true); map.getUiSettings().setZoomControlsEnabled(false); MapsInitializer.initialize(this.getActivity()); } catch (GooglePlayServicesNotAvailableException e) { Toast.makeText(getActivity(), "Google Play Services missing !", Toast.LENGTH_LONG).show(); } catch (InflateException e) { Toast.makeText(getActivity(), "Problems inflating the view !", Toast.LENGTH_LONG).show(); } catch (NullPointerException e) { Toast.makeText(getActivity(), "Google Play Services missing !", Toast.LENGTH_LONG).show(); } return view; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); lr = LocationRequest.create(); lr.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); lc = new LocationClient(this.getActivity().getApplicationContext(), this, this); lc.connect(); } @Override public void onLocationChanged(Location l2) { CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom( new LatLng(l2.getLatitude(), l2.getLongitude()), 15); map.animateCamera(cameraUpdate); } @Override public void onConnectionFailed(ConnectionResult arg0) { } @Override public void onConnected(Bundle connectionHint) { lc.requestLocationUpdates(lr, this); } @Override public void onDisconnected() { } } |
حالا برنامه را اجرا کنید می بینید که به صورت اتوماتیک به محلی که شما در آن هستید می رود.
سلام خسته نباشید واقعا عالی هستن آموزشاتون.
یه سوال داشتم چطور میشه یکم سریع تر پیدا کرد موقعیت رو از Network Provider بدون باز بودن GPS
سلام
خواهش می کنم امکان پذیر نیست در صورتی که خودتان با php یک api بسازید امکان پذیر است .
ارور میده ، public static class رو مینویسه که نباید static باشه. بعد یک کلاس دیگه هم باید تعریف بشه برای location