2011-12-31 5 views
0

J'essaie de créer une application pour localiser les arrêts de bus dans ma région, et j'ai regardé toutes les différentes façons de trouver l'emplacement actuel des GPS pour mon application, et tout ne semble pas travailler. La dernière implémentation que j'ai faite est de me donner la longitude et la latitude comme 0.0, signifiant qu'il ne trouve aucun endroit. Apparemment, ce que je veux être en mesure de faire est de trouver la station de bus la plus proche par son nom et pas en utilisant la vue de la carte, et ce serait fait en cliquant sur un bouton. Quelqu'un peut-il m'aider s'il vous plaît sur la façon de mettre en œuvre cela? Merci d'avance. Ci-dessous mon code:Emplacement GPS Android sans cartes

package co.uk.nixr.unibustimes; 

import java.util.ArrayList; 


import com.google.android.maps.GeoPoint; 
import com.google.android.maps.MapView; 

import co.uk.nixr.unibustimes.CustomMenu.OnMenuItemSelectedListener; 
import co.uk.nixr.unibustimes.LocationHandler; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.Dialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.content.pm.ActivityInfo; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Point; 
import android.location.Criteria; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.KeyEvent; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemSelectedListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.Spinner; 
import android.widget.Toast; 

public class LocationActivity extends Activity implements OnMenuItemSelectedListener, OnItemSelectedListener, android.view.View.OnClickListener{ 

    /** 
    * Some global variables. 
    */ 
    GeoPoint p; 
    private CustomMenu mMenu; 
    private LocationHandler lh; 
    private double longitude, latitude; 
    private Location location; 
    private MyLocationListener locationListener; 
    public static final int MENU_ITEM_1 = 1; 
    public static final int MENU_ITEM_2 = 2; 
    public static final int MENU_ITEM_3 = 3; 
    public static final int MENU_ITEM_4 = 4; 
    private static final int DIALOG_CLOSE = 0; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.setRequestedOrientation(
       ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     setContentView(R.layout.location); 



     final Button button = (Button) findViewById(R.id.mylocation); 
     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Perform action on click 
       findLocaiton(); 
      } 
     }); 

    public void findLocaiton() 
    { 
      String strProvider = "", strContext = ""; 
      strContext = Context.LOCATION_SERVICE; 
      LocationManager locationManager = (LocationManager)getSystemService(strContext); 

      Log.i("HomePage : ","Defining Criteria."); 

      Criteria criteria = new Criteria(); 
      criteria.setAccuracy(Criteria.ACCURACY_FINE); 
      criteria.setPowerRequirement(Criteria.POWER_MEDIUM); 
      criteria.setSpeedRequired(false); 
      criteria.setCostAllowed(false); 
      criteria.setAltitudeRequired(false); 
      criteria.setBearingRequired(false); 

      Log.i("HomePage : ","Defining Provider."); 
      strProvider = locationManager.getBestProvider(criteria, true); 
      if(strProvider == null) 
      { 
        Log.e("HomePage : ", "Provider is not available."); 
      } 
      else if(strProvider.equals(LocationManager.GPS_PROVIDER)) 
      { 
        location = locationManager.getLastKnownLocation(strProvider); 
        updateWithNewLocation(location); 
        locationManager.requestLocationUpdates(strProvider, 30000, 0, locationListener); 
      } 
      else if(strProvider.equals(LocationManager.NETWORK_PROVIDER)) 
      { 
        location = locationManager.getLastKnownLocation(strProvider); 
        updateWithNewLocation(location); 
        locationManager.requestLocationUpdates(strProvider, 30000, 0, locationListener); 
      } 
    } 

    public void updateWithNewLocation(Location location) 
    { 
        if(location != null) 
        { 
          latitude = location.getLatitude(); 
          longitude = location.getLongitude(); 
        } 
        else 
        { 
          Log.d("HomePage", "No Location Found!"); 
        } 

     Toast msg = Toast.makeText(LocationActivity.this,"Latitude: "+ latitude +"\n"+ "Longitude: "+longitude, Toast.LENGTH_LONG); 
     msg.show(); 
    } 

    private class MyLocationListener implements LocationListener 
    { 
      public void onLocationChanged(Location location) 
      { 
        updateWithNewLocation(location); 
      } 

      public void onProviderDisabled(String provider) {} 

      public void onProviderEnabled(String provider) {} 

      public void onStatusChanged(String provider, int status, Bundle extras) {} 
    } 

} 

Désolé je ne suis pas assez clair, je ne veux obtenir les coordonnées, puis l'utiliser pour trouver la station de bus le plus proche, mais pas afficher les coordonnées plutôt que je vais afficher le nom de la station de bus. Merci d'avance pour toute réponse ou suggestions données, je voudrais vraiment apprécier :(

+0

Je me demande comment vous pouvez faire reconnaître votre application aux arrêts de bus sans avoir de coordonnées? Vous pouvez le faire comparer par des coordonnées qui seront mappés à un nom de la station de bus et comparer les coordonnées mappées au nom avec votre emplacement, donc vous avez la recherche par nom: P –

+0

Désolé, je n'étais pas assez clair, je veux obtenir les coordonnées et ensuite l'utiliser pour trouver la station de bus la plus proche, mais pas afficher les coordonnées plutôt que je vais afficher le nom de la station de bus. –

Répondre

0

Essayez de filtrer votre code.Je vous suggère de supprimer les bits non pertinents et laissez simplement vos onCreate() et onClick() (qui est où vous avez dit que vous voulez récupérer l'emplacement). Il sera plus facile pour les autres de vous aider de cette façon.

+0

Je l'ai fait, et il semble toujours n'y avoir personne qui y répond :( –

0

ne sont pas bons endroits instantanious. Ce teste avec un vrai appareil?

Je voudrais essayer une configuration Lorsque vous commencez à recevoir des mises à jour dans OnResume, une fois que vous avez un bon emplacement, vous pouvez arrêter d'obtenir des mises à jour jusqu'à ce que l'utilisateur appuie sur le bouton. vos informations d'arrêt de bus les plus proches. Vous devriez lire la page Obtaining User Location.