Moderators Spect~ Δημοσ. 21 Μαΐου 2012 Moderators Δημοσ. 21 Μαΐου 2012 καλησπερα, παλευω να τελειωσω την εφαρμογη - πτυχιακη μου και εχω κολησει στο πως θα βρω την θεση του χρηστη. δουλευω σε API 10 αλλα επειδη εχω ICS η διαδικασια ευρεσης της θεσης πρεπει να γινει με τη χρηση AsyncTask. και εχω πελαγωσει. δεν ξερω τι να κανω. εχω ψαξει παντου και δεν μπορω να βρω τιποτα. εχει καποιο ιδεα? μπορει να με βοηθησει.? Να σημειωσω οτι AsyncTask χρησιμοποιω και για την κληση προς το σερβερ αλλα με την ευρεση της θεσης δεν εχω καμια τυχη. αν ξερει καποιος και μπορει να με βοηθησει θα το εκτιμουσα γιατι το επομενο βημα ειναι να γυρισω στην Gingerbread μεχρι την παρουσιαση. ΥΓ: απο την Honeycomb και μετα οτι εχει να κανει με δικτυο πρεπει να γινετε στο παρασκηνιο για αυτο κ πρεπει αναγκαστηκα να το κανω με asynctask.
nspyrou Δημοσ. 21 Μαΐου 2012 Δημοσ. 21 Μαΐου 2012 Δεν ξέρω αν σε βοηθάω, αλλά κατα βάση το 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 Spect~ Δημοσ. 21 Μαΐου 2012 Μέλος Moderators Δημοσ. 21 Μαΐου 2012 εχω κανει κατι ακομη με asynctask και το ξερω λιγακι. ειχα καταφερει να βρισκω τη θεση του χρηστη οταν ειχα gingerbread στο κινητο μολις περασα την ICS επρεπε να την υλοποιησω αλλιως. κ απο τοτε δεν εχω καταφερει γιατι για καποιο λογο σκαλωνει.. :/ θα δοκιμασω ξανα κ θα ενημερωσω
nspyrou Δημοσ. 21 Μαΐου 2012 Δημοσ. 21 Μαΐου 2012 Τί συμπεριφορά έχει?! Μήπως σου σκάει κανένα silent exception, και γι'αυτό σκαλώνει?! Δες σε debug mode στο Eclipse. Αν χτυπάει κάτι θα το δεις στο log ...
Moderators Spect~ Δημοσ. 21 Μαΐου 2012 Μέλος Moderators Δημοσ. 21 Μαΐου 2012 >http://stackoverflow.com/questions/5676653/how-to-get-location-using-asynctask πηρα τον κωδικα αυτου το εχω οπως το εχει με την διαφορα οτι εχω φτιαξει ενα locationControlListener τον οποιο καλω στην postexcecute. ειλικρινα δεν ξερω τι να κανω. μαλλον θα αναγκαστω να κανω downgrade το κινητο μου σε gingerbread για να τελειωσω την εφαρμογη και να την παρουσιασω και μετα παλι ICS
nspyrou Δημοσ. 22 Μαΐου 2012 Δημοσ. 22 Μαΐου 2012 To Debug log είναι καθαρό?! Τί σου λέει το Eclipse όταν το τρέχεις στον Emulator? Χαλάρωσε, κάποια μικρο-π@π@ρι@ είναι στάνταρτ!!
Moderators Spect~ Δημοσ. 22 Μαΐου 2012 Μέλος Moderators Δημοσ. 22 Μαΐου 2012 γενικα εχουν προβλημα πολλοι με αυτο και δεν εχω καταφερει να βρω τιποτα.. :/ σκεψου οτι παλευω με αυτο 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 Spect~ Δημοσ. 22 Μαΐου 2012 Μέλος Moderators Δημοσ. 22 Μαΐου 2012 καλημερα, λοιπον βρηκα αυτο τον κωδικα ο οποιος ναι μεν δειχνει να δουελευει αλλα δεν κανει αυτο που λεει. δηλαδη καποια στιγμη θα επρεπε να σταματαει δεν γινετε κ η τιμες ειναι παντα 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"); } } } }
nspyrou Δημοσ. 22 Μαΐου 2012 Δημοσ. 22 Μαΐου 2012 Βάσει του τελευταίου σου post, βλέπω οτι χρησιμοποιείς ως provider το NETWORK_PROVIDER. Αυτό υποτίθεται οτι πρέπει να πάρει στίγμα από την κεραία της τηλεφωνίας (αν δεν απατόμαι).. Δεν θα έπρεπε να είναι o GPS provider??
Moderators Spect~ Δημοσ. 22 Μαΐου 2012 Μέλος Moderators Δημοσ. 22 Μαΐου 2012 O Network Provider σου παρεχει τη θεση μεσω δικτυου δεν ειναι τοσο ακριβης η θεση αλλα ειναι πιο γρηγορη. για το σκοπο που το θελω ειναι οτι πρεπει. Επισης με τον network μπορει να βρει τη θεση σου ακομη και μεσα σε κτηριο κατι που δεν γινετε με το gps. για αυτο θελω να χρησιμοποιησω το network provider. παντως και με gps provider που το δοκιμασα τα ιδια κανει ... :/
Moderators Spect~ Δημοσ. 23 Μαΐου 2012 Μέλος Moderators Δημοσ. 23 Μαΐου 2012 το προβλημα λυθηκε δεν ειχα δηλωσει τον 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"); } } } }
Moderators Spect~ Δημοσ. 24 Μαΐου 2012 Μέλος Moderators Δημοσ. 24 Μαΐου 2012 ε ναι.. και παντα ετσι γινεται !! αλλα μεχρι να το βρεις...
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα