Changes between Initial Version and Version 1 of GoogleMapsActivity


Ignore:
Timestamp:
2010-04-19 13:37:52 (8 years ago)
Author:
majuvali
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • GoogleMapsActivity

    v1 v1  
     1=== !GoogleMapsActivity käytettäväksi komponenttimuodon kanssa === 
     2{{{ 
     3package fi.jyu.mit.android.gps.oletTassa; 
     4 
     5import com.google.android.maps.GeoPoint; 
     6import com.google.android.maps.MapActivity; 
     7import com.google.android.maps.MapController; 
     8import com.google.android.maps.MapView; 
     9import com.google.android.maps.Overlay; 
     10import java.util.Iterator; 
     11import java.util.List; 
     12 
     13import android.content.Context; 
     14import android.location.GpsSatellite; 
     15import android.location.GpsStatus; 
     16import android.location.Location; 
     17import android.location.LocationListener; 
     18import android.location.LocationManager; 
     19import android.os.Bundle; 
     20import android.util.Log; 
     21import android.view.Menu; 
     22import android.view.MenuInflater; 
     23import android.view.MenuItem; 
     24import android.widget.CompoundButton; 
     25import android.widget.TextView; 
     26import android.widget.Toast; 
     27import android.widget.CompoundButton.OnCheckedChangeListener; 
     28import android.graphics.Bitmap; 
     29import android.graphics.BitmapFactory; 
     30import android.graphics.Canvas; 
     31import android.graphics.Point; 
     32 
     33/** 
     34 * Olet Tässä! (komponenttiversio)  
     35 *  
     36 * Paikannusohjelma, jolla näet hetkellisen sijaintisi Googlekartalla. 
     37 * Paikannu suoritetaan GPS:n ja tukiasemien avulla. 
     38 *  
     39 *  
     40 * @author Jussi Perttola, Matti Välimäki 
     41 * @version 1.12 
     42 */ 
     43//public class GoogleMapsActivity extends MapActivity implements OnCheckedChangeListener { 
     44public class GoogleMapsActivity extends MapActivity implements OnCheckedChangeListener { 
     45     
     46    interface GoogleMapsLocationListener { 
     47        void onLocationChanged(Location loc); 
     48    } 
     49     
     50        GeneralLocationListener gpsLocationListener; 
     51        GeneralLocationListener towerLocationListener; 
     52        LocationManager gpsLocationManager; 
     53        LocationManager towerLocationManager; 
     54        MapView mapView; 
     55        TextView tvCoord; 
     56        MapController mapControl; 
     57        GeoPoint point; 
     58        Context context; 
     59        Toast toast; 
     60        boolean towerEnabled; 
     61        boolean gpsEnabled; 
     62        boolean isStarted; 
     63        boolean isUsingGps; 
     64        boolean showInNotificationBar; 
     65        boolean notificationVisible; 
     66        double currentLatitude; 
     67        double currentLongitude; 
     68        long latestTimeStamp; 
     69         
     70        private GoogleMapsLocationListener locationListener = null;  
     71         
     72        /** 
     73         * Päivitystiheys minimiaikana (sekunnit) ja -matkana (metrit)  
     74         */ 
     75        final int minimumSeconds = 1; 
     76        final int minimumDistance = 0;  
     77         
     78        /**  
     79         * Syntymävaiheen hommat 
     80         * Alustetaan arvoja ja pannaan homma käyntiin. 
     81         * @param savedInstanceState oletustila 
     82         */ 
     83        @Override 
     84        public void onCreate(Bundle savedInstanceState) { 
     85                super.onCreate(savedInstanceState); 
     86                setContentView(R.layout.main); 
     87                 
     88                context = getApplicationContext(); 
     89 
     90 
     91                mapView = (MapView) findViewById(R.id.mapView); 
     92                mapView.setBuiltInZoomControls(true); 
     93                 
     94                mapControl = mapView.getController(); 
     95            mapControl.setZoom(15);  
     96                 
     97                StartGpsManager(); 
     98        } 
     99        /** 
     100         * Luodaan valikko 
     101         * @param menu valikko 
     102         * @return aina true 
     103         */ 
     104        @Override 
     105        public boolean onCreateOptionsMenu(Menu menu) { 
     106                MenuInflater inflater = getMenuInflater(); 
     107                inflater.inflate(R.menu.optionsmenu, menu); 
     108                return true; 
     109        } 
     110         
     111         
     112        public void setLocationListener(GoogleMapsLocationListener listener) { 
     113            locationListener = listener; 
     114        } 
     115         
     116        /** 
     117         * Reagoi valikon nappien paineluun 
     118         * @param item painettu nappi 
     119         * @returns false 
     120         */ 
     121        public boolean onOptionsItemSelected(MenuItem item) { 
     122 
     123                if (item.getTitle().equals("Start/Stop")) { 
     124                        if (isStarted){ 
     125                                StopGpsManager(); 
     126                                toast = Toast.makeText(context, "GPS-paikannus pois päältä", Toast.LENGTH_LONG); 
     127                                toast.show();                            
     128                        } 
     129                        else{ 
     130                                StartGpsManager(); 
     131                                toast = Toast.makeText(context, "GPS-paikannus päällä", Toast.LENGTH_LONG); 
     132                                toast.show(); 
     133                        } 
     134                        return false; 
     135 
     136                }  
     137                if(item.getTitle().equals("Exit")){ 
     138                        StopGpsManager();                        
     139                        System.exit(0);                  
     140                        return false; 
     141                } 
     142                return false; 
     143        } 
     144 
     145        /** 
     146         * Käynnistää varsinaisen paikannuksen 
     147         * Sijaintitieto haetaan GPS:n ja tukiasemien avulla. 
     148         */ 
     149        public void StartGpsManager() { 
     150                isStarted = true; 
     151                gpsLocationListener = new GeneralLocationListener(); 
     152                towerLocationListener = new GeneralLocationListener(); 
     153                gpsLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     154                towerLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     155 
     156                CheckTowerAndGpsStatus(); 
     157 
     158                if (gpsEnabled) { 
     159                        // gps-satelliittipaikannus 
     160                        gpsLocationManager.requestLocationUpdates( 
     161                                        LocationManager.GPS_PROVIDER, minimumSeconds * 1000, 
     162                                        minimumDistance, gpsLocationListener); 
     163                        gpsLocationManager.addGpsStatusListener(gpsLocationListener); 
     164                        isUsingGps = true; 
     165                         
     166                } else if (towerEnabled) { 
     167                        isUsingGps = false; 
     168                        // tukiasemapaikannus 
     169                        towerLocationManager.requestLocationUpdates( 
     170                                        LocationManager.NETWORK_PROVIDER, minimumSeconds * 1000, 
     171                                        minimumDistance, towerLocationListener); 
     172 
     173                } else { 
     174                        isUsingGps = false; 
     175                        toast = Toast.makeText(context, "Ei GPS-signaalia", Toast.LENGTH_LONG); 
     176                        toast.show(); 
     177                        return; 
     178                } 
     179        } 
     180         
     181        /** 
     182         * Tarkistaa, onko tukiasemat ja GPS saatavilla. 
     183         */ 
     184        private void CheckTowerAndGpsStatus() { 
     185                towerEnabled = towerLocationManager 
     186                                .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
     187                gpsEnabled = gpsLocationManager 
     188                                .isProviderEnabled(LocationManager.GPS_PROVIDER); 
     189        } 
     190         
     191        /** 
     192         * Lopettaa paikantamisen 
     193         */ 
     194        public void StopGpsManager() { 
     195                isStarted = false;  
     196                if (towerLocationListener != null) { 
     197                        towerLocationManager.removeUpdates(towerLocationListener); 
     198                } 
     199 
     200                if (gpsLocationListener != null) { 
     201                        gpsLocationManager.removeUpdates(gpsLocationListener); 
     202                        gpsLocationManager.removeGpsStatusListener(gpsLocationListener); 
     203                } 
     204        } 
     205 
     206        /** 
     207         * Aloittaa paikantamisen uudelleen 
     208         */ 
     209        public void RestartGpsManagers() { 
     210                StopGpsManager(); 
     211                StartGpsManager(); 
     212        } 
     213 
     214        /** 
     215         * Yritetään aloittaa paikantaminen uudelleen, jos GPS ei vastaa 
     216         */ 
     217        public void ResetManagersIfRequired() { 
     218                CheckTowerAndGpsStatus(); 
     219 
     220                if (gpsEnabled) { 
     221                        if (!isUsingGps) { 
     222                                RestartGpsManagers(); 
     223                        } 
     224                } 
     225        } 
     226 
     227        /** 
     228         * Vastaanottaa sijaintitietoja aktiivisesti ja lähettää ne eteenpäin 
     229         * kartalle ja tulostettavaksi. 
     230         *  
     231         * @author Jussi Perttola, Matti Välimäki 
     232         * @version 1.1 
     233         */ 
     234        public class GeneralLocationListener implements LocationListener, 
     235                        GpsStatus.Listener { 
     236 
     237                 
     238                 
     239                /** 
     240                 * GPS-sijaintitiedon muutoshallinta 
     241                 * @param loc sijainti 
     242                 */ 
     243                public void onLocationChanged(Location loc) { 
     244                        try { 
     245                                if (loc != null) { 
     246                                //    if ( locationListener != null ) locationListener.onLocationChanged(loc); 
     247                                    
     248                                        currentLatitude  =  loc.getLatitude(); 
     249                                        currentLongitude =  loc.getLongitude();          
     250                                         
     251                                        TextView locationText = (TextView) findViewById(R.id.location); 
     252                                        locationText.setText(Location.convert(currentLatitude, Location.FORMAT_SECONDS)  
     253                                                        + ", " + Location.convert(currentLongitude, Location.FORMAT_SECONDS)); 
     254                                         
     255                                        point = new GeoPoint( 
     256                                            (int) (currentLatitude * 1E6),  
     257                                            (int) (currentLongitude * 1E6)); 
     258                                  
     259                                    mapControl.animateTo(point); 
     260                                    // lisätään merkki kartalle 
     261                                MapOverlay mapOverlay = new MapOverlay(); 
     262                                List<Overlay> listOfOverlays = mapView.getOverlays(); 
     263                                listOfOverlays.clear(); 
     264                                listOfOverlays.add(mapOverlay);         
     265                                mapView.invalidate(); 
     266                                 
     267                                } 
     268 
     269                        } catch (Exception ex) { 
     270                                toast = Toast.makeText(context, ex.getMessage(), Toast.LENGTH_LONG); 
     271                                toast.show(); 
     272                        } 
     273                } 
     274                 
     275                /** 
     276                 * Jos yhteys palveluntarjoajaan katkaistaan, käynnistetään uudelleen. 
     277                 */ 
     278                public void onProviderDisabled(String provider) { 
     279                        RestartGpsManagers(); 
     280                } 
     281 
     282                /** 
     283                 * Jos yhteys palveluntarjoajaan muodostetaan, käynnistetään uudelleen. 
     284                 */ 
     285                public void onProviderEnabled(String provider) { 
     286                        RestartGpsManagers(); 
     287                } 
     288 
     289                /** 
     290                 * Pakollinen täyteluokka. 
     291                 */ 
     292                public void onStatusChanged(String provider, int status, Bundle extras) { 
     293                        // TODO Auto-generated method stub 
     294                } 
     295 
     296                /** 
     297                 * GPS:n tilamuutoksen tapahtumakäsittelijä. 
     298                 */ 
     299                public void onGpsStatusChanged(int event) { 
     300 
     301                        switch (event) { 
     302                        case GpsStatus.GPS_EVENT_SATELLITE_STATUS: 
     303                                GpsStatus status = gpsLocationManager.getGpsStatus(null); 
     304                                Iterator<GpsSatellite> it = status.getSatellites().iterator(); 
     305                                int count = 0; 
     306                                while (it.hasNext()) { 
     307                                        count++; 
     308                                        GpsSatellite oSat = (GpsSatellite) it.next(); 
     309                                        Log.i("Main", 
     310                                                        "LocationActivity - onGpsStatusChange: Satellites:" 
     311                                                                        + oSat.getSnr()); 
     312                                } break; 
     313 
     314                        case GpsStatus.GPS_EVENT_STARTED: 
     315                                toast = Toast.makeText(context, "GPS käynnissä, yritetään paikantaa", 
     316                                                Toast.LENGTH_LONG); 
     317                                toast.show(); 
     318                                break; 
     319                        } 
     320                } 
     321        } 
     322        /** 
     323         * Piirtää kuvan kartan päälle 
     324         *  
     325         * @author Jussi Perttola, Matti Välimäki 
     326         * @version 1.1 
     327         */ 
     328    class MapOverlay extends com.google.android.maps.Overlay 
     329    { 
     330        @Override 
     331        public boolean draw(Canvas canvas, MapView mapView,  
     332        boolean shadow, long when)  
     333        { 
     334            super.draw(canvas, mapView, shadow);                    
     335  
     336            /** 
     337             * Muuttaa sijainnin pikseleiksi näytöllä 
     338             */ 
     339            Point screenPts = new Point(); 
     340            mapView.getProjection().toPixels(point, screenPts); 
     341  
     342            /** 
     343             * Piirtää varsinaisen kuvan ruudulle 
     344             * Kuvaa siirretään sen korkeuden verran  ylöspäin, että kuvan vasen alanurkka on osoitettavan 
     345             * pisteen kohdalla.  
     346             *  
     347             * Koodissa käytetään itsetehtyä kuvaa molli.png 
     348             * Kuva pitää sijoittaa kansioon OletTassa -> res -> drawable 
     349             * josta sitä voi koodissa kutsua nimellä ilman tiedostopäätettä 
     350             *  
     351             */ 
     352            Bitmap bmp = BitmapFactory.decodeResource( 
     353                getResources(), R.drawable.molli);  
     354            canvas.drawBitmap(bmp, screenPts.x, screenPts.y-bmp.getHeight(), null);          
     355            return true; 
     356        } 
     357    }  
     358         
     359        /** 
     360         * Pakollinen täyteluokka. 
     361         */ 
     362        @Override 
     363        protected boolean isRouteDisplayed() { 
     364                // TODO Auto-generated method stub 
     365                return false; 
     366        } 
     367        /** 
     368         * Pakollinen täyteluokka. 
     369         */ 
     370        public void onCheckedChanged(CompoundButton arg0, boolean arg1) { 
     371                // TODO Auto-generated method stub 
     372        }  
     373} 
     374}}}