Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет “Львівська політехніка”
/
Звіт
До Лабораторної роботи №6
З дисципліни: «Мережні операційні системи»
На тему: «Управління геоконтекстними сервісами в ОС Android»
Мета роботи: Оволодіти навичками роботи з програмним інтерфейсом геоконтекстних сервісів в ОС Android.
Послідовність виконання роботи:
1. Ознайомитись з загальними відомостями про роботу з засобами позиціонування та сервісом Google Maps в ОС Android.
2. Створити тестову програму на основі прикладів тестових програм (див.1.5) згідно заданого варіанту.
3. Відлагодити та дослідити роботу тестової програми на емуляторі.
4. Знайти відповіді на контрольні запитання.
5. Скласти та захистити звіт з лабораторної роботи.
Варіанти завдань:
Тестова програма, яка визначає біжучу відстань між користувачем та заданим корпусом Львівської політехніки (номер корпусу користувач вибирає зі списку) та відображає її у вигляді відрізку прямої лінії на карті.
Лістинг тестової програми:
MainActivity.java
package com.university.lab6alter;import android.Manifest;import android.content.Context;import android.content.pm.PackageManager;import android.location.LocationManager;import android.support.v4.app.ActivityCompat;import android.support.v7.app.AppCompatActivity;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;import com.google.android.gms.maps.model.PolylineOptions;import android.location.Location;import android.app.AlertDialog;import android.view.Menu;import android.view.MenuItem;import static java.lang.String.format;public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback { String name; double lat, lng; private GoogleMap mMap; boolean isMarkerPlaced = false; Location location; SupportMapFragment mapFrag; @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); getSupportActionBar().setTitle("Map Location Activity"); mapFrag = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFrag.getMapAsync(this); } @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } mMap.setMyLocationEnabled(true); mMap.setBuildingsEnabled(true); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.gk: lat = 49.83511; lng = 24.01446; name = "Головний корпус"; mMap.clear(); mMap.addMarker(new MarkerOptions().position(new LatLng(lat, lng)).title(name)); isMarkerPlaced = true; break; case R.id.k1: lat = 49.83533; lng = 24.01004; name = "Корпус №1"; mMap.clear(); mMap.addMarker(new MarkerOptions().position(new LatLng(lat, lng)).title(name)); isMarkerPlaced = true; break; case R.id.k5: lat = 49.835; lng = 24.00824; name = "Корпус №5"; mMap.clear(); mMap.addMarker(new MarkerOptions().position(new LatLng(lat, lng)).title(name)); isMarkerPlaced = true; break; case R.id.way: if (isMarkerPlaced) { LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // getting GPS status boolean isGPSEnabled = locationManager .isProviderEnabled(LocationManager.GPS_PROVIDER); // getting network status boolean isNetworkEnabled = locationManager .isProviderEnabled(LocationManager.NETWORK_PROVIDER); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return true; } if (isNetworkEnabled) { location = locationManager .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); } if (isGPSEnabled) { location = locationManager .getLastKnownLocation(LocationManager.GPS_PROVIDER); } LatLng source = new LatLng(mMap.getMyLocation().getLatitude(), mMap.getMyLocation().getLongitude()); LatLng dest = new LatLng(lat, lng); PolylineOptions polylineOptions = new PolylineOptions(); polylineOptions.add(source, dest); mMap.clear(); mMap.addPolyline(polylineOptions); mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(source, 10)); float[] results = new float[1]; Location.distanceBetween(location.getLatitude(), location.getLongitude(), lat, lng, results); mMap.addMarker(new MarkerOptions().position(new LatLng(lat, lng)).title(name + " distance " + String.valueOf(results[0]) + " m")); } else { AlertDialog alertDialog; alertDialog = new AlertDialog.Builder(this).create(); alertDialog.setTitle("Warning"); alertDialog.setMessage("Виберіть спочатку навчальний корпус"); alertDialog.show(); } break; default: return super.onOptionsItemSelected(item); } return true; }}
Manifest:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.maps"> <!-- 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.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <!-- The API key for Google Maps-based APIs is defined as a string resource. (See the file "res/values/google_maps_api.xml"). Note that the API key is linked to the encryption key used to sign the APK. You need a different API key for each encryption key, including the release key that is used to sign the APK for publishing. You can define the keys for the debug and release targets in src/debug/ and src/release/. --> <meta-data android:name="com.google.android.geo.API_KEY" android:value="@string/google_maps_key" /> <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>
main.xml
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/gk" app:showAsAction="never" android:title="Головний корпус" /> <item android:id="@+id/k1" app:showAsAction="never" android:title="Перший корпус" /> <item android:id="@+id/k5" app:showAsAction="never" android:title="П'ятий корпус" /> <item android:id="@+id/way" app:showAsAction="never" android:title="Прокласти маршут" /></menu>
Результати виконання програми:
/
Висновок: На цій лабораторні роботі я оволодів навичками роботи з програмним інтерфейсом геоконтекстних сервісів в ОС Android.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!