Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

  • Moderators
Δημοσ.

καλησπερα,

παλευω να τελειωσω την εφαρμογη - πτυχιακη μου και εχω κολησει στο πως θα βρω την θεση του χρηστη.

δουλευω σε API 10 αλλα επειδη εχω ICS η διαδικασια ευρεσης της θεσης πρεπει να γινει με τη χρηση AsyncTask.

και εχω πελαγωσει. δεν ξερω τι να κανω. εχω ψαξει παντου και δεν μπορω να βρω τιποτα. εχει καποιο ιδεα?

μπορει να με βοηθησει.?

Να σημειωσω οτι AsyncTask χρησιμοποιω και για την κληση προς το σερβερ αλλα με την ευρεση της θεσης δεν εχω καμια τυχη.

αν ξερει καποιος και μπορει να με βοηθησει θα το εκτιμουσα γιατι το επομενο βημα ειναι να γυρισω στην Gingerbread μεχρι την παρουσιαση.

 

ΥΓ: απο την Honeycomb και μετα οτι εχει να κανει με δικτυο πρεπει να γινετε στο παρασκηνιο για αυτο κ πρεπει αναγκαστηκα να το κανω με asynctask.

Δημοσ.

Δεν ξέρω αν σε βοηθάω, αλλά κατα βάση το Location του χρήστη εγώ το τσιμπάω έτσι ...

 

 

>
public Location CurrentLocation() {
	//LocationProvider locationProvider = LocationManager.NETWORK_PROVIDER;
	// Or use LocationManager.GPS_PROVIDER
	//Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider);		
	
       LocationManager locationManager; 
       String context = Context.LOCATION_SERVICE; 
       locationManager = (LocationManager)RefActivity.getSystemService(context); 

       Criteria crta = new Criteria(); 
       crta.setAccuracy(Criteria.ACCURACY_FINE); 
       crta.setAltitudeRequired(false); 
       crta.setBearingRequired(false); 
       crta.setCostAllowed(true); 
       crta.setPowerRequirement(Criteria.POWER_LOW); 
       String provider = locationManager.getBestProvider(crta, true); 

       // String provider = LocationManager.GPS_PROVIDER; 
       Location location = locationManager.getLastKnownLocation(provider);

       this.Latitude = (int)(location.getLatitude() * 1E6);
       this.Longitude = (int)(location.getLongitude() * 1E6);
       
       if ( this.Latitude == 0 || this.Longitude == 0)
       {
       	provider = locationManager.NETWORK_PROVIDER;
       	location = locationManager.getLastKnownLocation(provider);
       	
       	this.Latitude = (int)(location.getLatitude() * 1E6);
       	this.Longitude = (int)(location.getLongitude() * 1E6);
       }
       
       return location;
}

 

σε κάποιο από τα Activities της εφαρμογής μου. Θα μπορούσες να κάνεις extend το AsyncTask και να εκτελέσεις κάτι αντίστοιχο στο doInBackground() ...

 

ένα παράδειγμα θα δεις Εδώ ...

 

Ελπίζω να σε βοήθησα ...

  • Moderators
Δημοσ.

εχω κανει κατι ακομη με asynctask και το ξερω λιγακι.

ειχα καταφερει να βρισκω τη θεση του χρηστη οταν ειχα gingerbread στο κινητο

μολις περασα την ICS επρεπε να την υλοποιησω αλλιως. κ απο τοτε δεν εχω καταφερει

γιατι για καποιο λογο σκαλωνει.. :/

θα δοκιμασω ξανα κ θα ενημερωσω

Δημοσ.

Τί συμπεριφορά έχει?!

Μήπως σου σκάει κανένα silent exception, και γι'αυτό σκαλώνει?!

 

Δες σε debug mode στο Eclipse. Αν χτυπάει κάτι θα το δεις στο log ...

  • Moderators
Δημοσ.

>http://stackoverflow.com/questions/5676653/how-to-get-location-using-asynctask

 

πηρα τον κωδικα αυτου

το εχω οπως το εχει

με την διαφορα οτι εχω φτιαξει ενα locationControlListener τον οποιο καλω στην postexcecute.

 

ειλικρινα δεν ξερω τι να κανω. μαλλον θα αναγκαστω να κανω downgrade το κινητο μου σε gingerbread για να τελειωσω την εφαρμογη και να την παρουσιασω και μετα παλι ICS

Δημοσ.

To Debug log είναι καθαρό?!

 

Τί σου λέει το Eclipse όταν το τρέχεις στον Emulator?

 

Χαλάρωσε, κάποια μικρο-π@π@ρι@ είναι στάνταρτ!! ;)

  • Moderators
Δημοσ.

γενικα εχουν προβλημα πολλοι με αυτο και δεν εχω καταφερει να βρω τιποτα.. :/

σκεψου οτι παλευω με αυτο 2 μερες τωρα και η προοδος ειναι αρνητικη..

το προβλημα ειναι στο locationListener.

εκει για καποιο λογο σκαλωνει.

 

στην doInBackground εχω αυτο το κομματι που φαινεται πιο κατω.

κ κολλαει στην 4η γραμμη στο request.

 

>protected String doInBackground(String[]... params) {
	    locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
	    locationManager.getLastKnownLocation("location");		  
	    locationManager.requestLocationUpdates( LocationManager.NETWORK_PROVIDER, 0, 0f, new LocationListener()
	    {
	                    public void onLocationChanged(Location loc)
	                    {
	                    lat = loc.getLatitude();
	                    longit = loc.getLongitude();		                    
	                    }

	                    public void onProviderDisabled(String arg0) {
	                    }
	                    public void onProviderEnabled(String arg0) {
	                    }
	                    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
	                    }
	            });
	    return null;  
	}

  • Moderators
Δημοσ.

καλημερα,

λοιπον βρηκα αυτο τον κωδικα ο οποιος ναι μεν δειχνει να δουελευει αλλα δεν κανει αυτο που λεει.

δηλαδη καποια στιγμη θα επρεπε να σταματαει δεν γινετε κ η τιμες ειναι παντα 0. αν ξερει καποιος κατι θα το εκτιμουσα. θελω απλα να καταφερω να βρω την θεση του χρηστη και να δουλευει σε ICS εκδοση.. τοσο δυσκολο ειναι ? :/

 

>public class FetchCordinates extends AsyncTask<String, Integer, String> {
       ProgressDialog progDailog = null;

       public double lati = 0.0;
       public double longi = 0.0;

       public LocationManager mLocationManager;
       public VeggsterLocationListener mVeggsterLocationListener;

       @Override
       protected void onPreExecute() {
           mVeggsterLocationListener = new VeggsterLocationListener();
           mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

           mLocationManager.requestLocationUpdates(
                   LocationManager.NETWORK_PROVIDER, 0, 0,
                   mVeggsterLocationListener);

           progDailog = new ProgressDialog(FastMainActivity.this);
           progDailog.setMessage("Loading...");
           progDailog.setIndeterminate(true);
           progDailog.setCancelable(true);
           progDailog.show();

       }

       protected void onPostExecute(String result) {
           progDailog.dismiss();

           Toast.makeText(FastMainActivity.this,
                   "LATITUDE :" + lati + " LONGITUDE :" + longi,
                   Toast.LENGTH_LONG).show();
       }

       @Override
       protected String doInBackground(String... params) {
           // TODO Auto-generated method stub

           while (this.lati == 0.0) {

           }
           return null;
       }

       public class VeggsterLocationListener implements LocationListener {

           @Override
           public void onLocationChanged(Location location) {

               int lat = (int) location.getLatitude(); // * 1E6);
               int log = (int) location.getLongitude(); // * 1E6);
               int acc = (int) (location.getAccuracy());

               String info = location.getProvider();
               try {

                   // LocatorService.myLatitude=location.getLatitude();

                   // LocatorService.myLongitude=location.getLongitude();

                   lati = location.getLatitude();
                   longi = location.getLongitude();

               } catch (Exception e) {
                   // progDailog.dismiss();
                   // Toast.makeText(getApplicationContext(),"Unable to get Location"
                   // , Toast.LENGTH_LONG).show();
               }

           }

           @Override
           public void onProviderDisabled(String provider) {
               Log.i("OnProviderDisabled", "OnProviderDisabled");
           }

           @Override
           public void onProviderEnabled(String provider) {
               Log.i("onProviderEnabled", "onProviderEnabled");
           }

           @Override
           public void onStatusChanged(String provider, int status,
                   Bundle extras) {
               Log.i("onStatusChanged", "onStatusChanged");

           }

       }

   }

}

Δημοσ.

Βάσει του τελευταίου σου post, βλέπω οτι χρησιμοποιείς ως provider το NETWORK_PROVIDER. Αυτό υποτίθεται οτι πρέπει να πάρει στίγμα από την κεραία της τηλεφωνίας (αν δεν απατόμαι).. Δεν θα έπρεπε να είναι o GPS provider??

  • Moderators
Δημοσ.

O Network Provider σου παρεχει τη θεση μεσω δικτυου

δεν ειναι τοσο ακριβης η θεση αλλα ειναι πιο γρηγορη. για το σκοπο που το θελω ειναι οτι πρεπει.

Επισης με τον network μπορει να βρει τη θεση σου ακομη και μεσα σε κτηριο κατι που δεν γινετε με το gps. για αυτο θελω

να χρησιμοποιησω το network provider. παντως και με gps provider που το δοκιμασα τα ιδια κανει ... :/

  • Moderators
Δημοσ.

το προβλημα λυθηκε :) δεν ειχα δηλωσει τον locatorService για αυτο δεν επαιζε!

στο spoiler εχω τον κωδικα για οποιον θελει να τον χρησιμοποιησει :)

 

 

>import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

public class Main extends Activity {
double lat = 0.0, longit = 0.0;
Intent locatorService = null;

protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.splash);
		startService();	
}

public boolean stopService() {
	if (this.locatorService != null) {
		this.locatorService = null;
	}
	return true;
}

public boolean startService() {
	try {
		UserLocation userLocation = new UserLocation();
		userLocation.execute();
		return true;
	} catch (Exception error) {
		return false;
	}
}

protected void onDestroy() {
	super.onDestroy();
}

protected void onPause() {
	super.onPause();
}

protected void onResume() {
	super.onResume();
}

protected void onStart() {
	super.onStart();
}

protected void onStop() {
	super.onStop();
}

public class UserLocation extends AsyncTask<String, Integer, String> {
	ProgressDialog progDailog = null;
	public double lati = 0.0;
	public double longi = 0.0;
	public LocationManager userLocationManager;
	public UserLocationListener userLocationListener;

	protected void onPreExecute() {
		userLocationListener = new UserLocationListener();
		userLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
		userLocationManager.requestLocationUpdates(
				LocationManager.NETWORK_PROVIDER, 0, 0,
				userLocationListener);
		progDailog = new ProgressDialog(Main.this);
		progDailog.setMessage("Εύρεση θέσης χρήστη..");
		progDailog.setIndeterminate(true);
		progDailog.setCancelable(true);
		progDailog.show();
	}

	protected void onPostExecute(String result) {
		progDailog.dismiss();						
		Toast.makeText(Main.this,
				"LATITUDE :" + lati + " LONGITUDE :" + longi,
				Toast.LENGTH_LONG).show();			
	}

	protected String doInBackground(String... params) {
		while (this.lati == 0.0) {
		}
		return null;
	}

	public class UserLocationListener implements LocationListener {

		public void onLocationChanged(Location location) {
			try {
				lati = location.getLatitude();
				longi = location.getLongitude();
			} catch (Exception e) {
				progDailog.dismiss();
				Toast.makeText(Main.this, "Unable to get Location",
						Toast.LENGTH_LONG).show();
			}
		}

		@Override
		public void onProviderDisabled(String provider) {
			Log.i("OnProviderDisabled", "OnProviderDisabled");
		}

		@Override
		public void onProviderEnabled(String provider) {
			Log.i("onProviderEnabled", "onProviderEnabled");
		}

		@Override
		public void onStatusChanged(String provider, int status,
				Bundle extras) {
			Log.i("onStatusChanged", "onStatusChanged");

		}
	}
}
}

 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...