दिलचस्प पोस्ट
एंड्रॉइड के साथ HTTPS GET (SSL) और स्व-हस्ताक्षरित सर्वर प्रमाण पत्र दृश्य स्टूडियो 2010 में बूस्ट का उपयोग कैसे करें स्टार्टअप पर शेल स्क्रिप्ट को चलाने के लिए PHP से एक्सएमएल से खाली टैग निकालें php तारीख सत्यापन मैं जावा में एक पूर्ण सरणी कैसे बदलूं? क्यों सी compilers बाह्य नामों को रेखांकित करते हैं? जावास्क्रिप्ट में प्रारूप "YYYYmmdd" में दिनांक को कैसे पार्स करना है? क्या जावा में ग्रेडबल में एक चर को घोषित करना संभव है? रंग / रंग / बदलाव का चयन कैसे करें संभाल / एंकर चुनें? किसी की स्टीम इन्वेंट्री प्राप्त करना BuildActivity ToolVersion पर ध्यान नहीं देता बाश स्क्रिप्ट के पास दिए गए तर्कों की संख्या की जांच करें इफ़्राम स्क्रॉल आईओएस 8 jQuery के कीप्रेस एरो कुंजियाँ

Android में एक सेवा के माध्यम से जीपीएस स्थान प्राप्त करें

मुझे एक पृष्ठभूमि सेवा का उपयोग करके उपयोगकर्ता के स्थान पर नजर रखने की आवश्यकता है, और फिर उन्हें लोड और उपयोगकर्ता के लिए पथ दिखाया गया है।

किसी गतिविधि का उपयोग करना, जीपीएस स्थानों को प्राप्त करना काफी आसान था, लेकिन जब मुझे सेवा के जरिये ऐसा करना पड़ता था, तो मैं एक समस्या में आया था क्योंकि ऐसा लगता है कि केवल लूप धागे (या ऐसा कुछ) के लिए काम करते हैं।

जैसा कि मैंने एक समाधान के लिए इंटरनेट की खोज की है, मुझे पता चला है कि बहुत से लोगों को एक ही समस्या मिलती है, लेकिन मुझे एक कामकाजी समाधान नहीं मिला। कुछ लोगों का कहना है कि आपको तैयार-> लूप-> छोड़ने की आवश्यकता है, और कुछ कहते हैं कि आपको एक हैंडलर थ्रेड का उपयोग करना है, लेकिन फिर भी, मैं यह नहीं जान सकता कि ऐसी चीज़ों को उचित तरीके से कैसे करें

वेब के समाधान से एकत्रित समाधान "Android में एक सेवा के माध्यम से जीपीएस स्थान प्राप्त करें"

सेवा में सुनने की कार्यक्षमता को कार्यान्वित करने में समस्या क्या है, मैं समझ नहीं पा रहा हूं। यह गतिविधि में आपके द्वारा किए जाने वाले कार्यों के समान दिखता है। बस एक स्थान श्रोता को परिभाषित करें और स्थान अपडेट के लिए पंजीकरण करें। आप निम्न कोड को उदाहरण के रूप में देख सकते हैं:

मैनिफ़ेस्ट फ़ाइल:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".LocationCheckerActivity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".MyService" android:process=":my_service" /> </application> 

सेवा फ़ाइल:

 import android.app.Service; import android.content.Context; import android.content.Intent; import android.location.Location; import android.location.LocationManager; import android.os.Bundle; import android.os.IBinder; import android.util.Log; public class MyService extends Service { private static final String TAG = "BOOMBOOMTESTGPS"; private LocationManager mLocationManager = null; private static final int LOCATION_INTERVAL = 1000; private static final float LOCATION_DISTANCE = 10f; private class LocationListener implements android.location.LocationListener{ Location mLastLocation; public LocationListener(String provider) { Log.e(TAG, "LocationListener " + provider); mLastLocation = new Location(provider); } @Override public void onLocationChanged(Location location) { Log.e(TAG, "onLocationChanged: " + location); mLastLocation.set(location); } @Override public void onProviderDisabled(String provider) { Log.e(TAG, "onProviderDisabled: " + provider); } @Override public void onProviderEnabled(String provider) { Log.e(TAG, "onProviderEnabled: " + provider); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { Log.e(TAG, "onStatusChanged: " + provider); } } LocationListener[] mLocationListeners = new LocationListener[] { new LocationListener(LocationManager.GPS_PROVIDER), new LocationListener(LocationManager.NETWORK_PROVIDER) }; @Override public IBinder onBind(Intent arg0) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.e(TAG, "onStartCommand"); super.onStartCommand(intent, flags, startId); return START_STICKY; } @Override public void onCreate() { Log.e(TAG, "onCreate"); initializeLocationManager(); try { mLocationManager.requestLocationUpdates( LocationManager.NETWORK_PROVIDER, LOCATION_INTERVAL, LOCATION_DISTANCE, mLocationListeners[1]); } catch (java.lang.SecurityException ex) { Log.i(TAG, "fail to request location update, ignore", ex); } catch (IllegalArgumentException ex) { Log.d(TAG, "network provider does not exist, " + ex.getMessage()); } try { mLocationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, LOCATION_INTERVAL, LOCATION_DISTANCE, mLocationListeners[0]); } catch (java.lang.SecurityException ex) { Log.i(TAG, "fail to request location update, ignore", ex); } catch (IllegalArgumentException ex) { Log.d(TAG, "gps provider does not exist " + ex.getMessage()); } } @Override public void onDestroy() { Log.e(TAG, "onDestroy"); super.onDestroy(); if (mLocationManager != null) { for (int i = 0; i < mLocationListeners.length; i++) { try { mLocationManager.removeUpdates(mLocationListeners[i]); } catch (Exception ex) { Log.i(TAG, "fail to remove location listners, ignore", ex); } } } } private void initializeLocationManager() { Log.e(TAG, "initializeLocationManager"); if (mLocationManager == null) { mLocationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE); } } } 
 public class GPSService extends Service implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, com.google.android.gms.location.LocationListener { private LocationRequest mLocationRequest; private GoogleApiClient mGoogleApiClient; private static final String LOGSERVICE = "#######"; @Override public void onCreate() { super.onCreate(); buildGoogleApiClient(); Log.i(LOGSERVICE, "onCreate"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i(LOGSERVICE, "onStartCommand"); if (!mGoogleApiClient.isConnected()) mGoogleApiClient.connect(); return START_STICKY; } @Override public void onConnected(Bundle bundle) { Log.i(LOGSERVICE, "onConnected" + bundle); Location l = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); if (l != null) { Log.i(LOGSERVICE, "lat " + l.getLatitude()); Log.i(LOGSERVICE, "lng " + l.getLongitude()); } startLocationUpdate(); } @Override public void onConnectionSuspended(int i) { Log.i(LOGSERVICE, "onConnectionSuspended " + i); } @Override public void onLocationChanged(Location location) { Log.i(LOGSERVICE, "lat " + location.getLatitude()); Log.i(LOGSERVICE, "lng " + location.getLongitude()); LatLng mLocation = (new LatLng(location.getLatitude(), location.getLongitude())); EventBus.getDefault().post(mLocation); } @Override public void onDestroy() { super.onDestroy(); Log.i(LOGSERVICE, "onDestroy - Estou sendo destruido "); } @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onConnectionFailed(ConnectionResult connectionResult) { Log.i(LOGSERVICE, "onConnectionFailed "); } private void initLocationRequest() { mLocationRequest = new LocationRequest(); mLocationRequest.setInterval(5000); mLocationRequest.setFastestInterval(2000); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); } private void startLocationUpdate() { initLocationRequest(); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return; } LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); } private void stopLocationUpdate() { LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); } protected synchronized void buildGoogleApiClient() { mGoogleApiClient = new GoogleApiClient.Builder(this) .addOnConnectionFailedListener(this) .addConnectionCallbacks(this) .addApi(LocationServices.API) .build(); } } 

बस पूरक, मैंने इस तरह से कार्यान्वित किया और आम तौर पर मेरी सर्विस क्लास में काम किया

मेरी सेवा में

 @Override public void onCreate() { mHandler = new Handler(Looper.getMainLooper()); mHandler.post(this); super.onCreate(); } @Override public void onDestroy() { mHandler.removeCallbacks(this); super.onDestroy(); } @Override public void run() { InciarGPSTracker(); } 

ठीक है, मैंने इसे सेवा के क्रिएट पर एक हेन्डलर बनाकर और जीपीएस फ़ंक्शन को वहां से बुलाते हुए हल किया है।