Autore Topic: [Service + GoogleApiClient] - Stop applicazione  (Letto 348 volte)

Offline Gargano10041983

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus 7
  • Sistema operativo:
    Windows 7
[Service + GoogleApiClient] - Stop applicazione
« il: 07 Marzo 2015, 17:58:07 CET »
0
Ciao a tutti,
sto cercando di lavorare in background facendo uso dei Service di Android.

Al momento eseguendo il seguente codice all'interno dell'activity principale non ricevo nessun tipo di errore e tutto funziona regolarmente:
Codice (Java): [Seleziona]
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
                                double latitudeDevice = 0.0;
                                double longitudeDevice = 0.0;
                                if (mLastLocation != null) {
                                        latitudeDevice = mLastLocation.getLatitude();
                                        longitudeDevice = mLastLocation.getLongitude();
                                }

In sostanza l'applicazione deve poter rilevare latitudine e longitudine del dispositivo.

Ora tentando di spostare il suddetto codice all'interno di un Service purtroppo l'applicazione si interrompe bruscamente (il tutto viene eseguito su un dispositivo reale).

Di seguito vi riporto tutto il codice del service:
Codice (Java): [Seleziona]
public class MyService extends IntentService implements ConnectionCallbacks, OnConnectionFailedListener {
       
        // LogCat tag
    private static final String TAG = MainActivity.class.getSimpleName();
       
        private Location mLastLocation;
       
        // Google client to interact with Google API
    private GoogleApiClient mGoogleApiClient;
       
    private final static int TIMEOUT_MILLISEC = 10000;
   
        public MyService(){
                super("MyService");
                // Building the GoogleApi client
                buildGoogleApiClient();
        }
       
        @Override
        protected void onHandleIntent(Intent i){
                try {
                        while(true){
                                double latitudeDevice = 0.0;
                                double longitudeDevice = 0.0;
                                mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
                                if (mLastLocation != null) {
                                        latitudeDevice = mLastLocation.getLatitude();
                                        longitudeDevice = mLastLocation.getLongitude();
                                }
                                try{
                                        JSONObject json = new JSONObject();
                                        json.put("latitudine", latitudeDevice);
                                        json.put("longitudine", longitudeDevice);
                                        HttpParams httpParams = new BasicHttpParams();
                                        HttpConnectionParams.setConnectionTimeout(httpParams, TIMEOUT_MILLISEC);
                                        HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT_MILLISEC);
                                        HttpClient client = new DefaultHttpClient(httpParams);
                                        String url = "http://XXXXXXXXXXXXXXXXX";
                                        HttpPost request = new HttpPost(url);
                                        request.setEntity(new ByteArrayEntity(json.toString().getBytes("UTF8")));
                                        request.setHeader("json", json.toString());
                                        HttpResponse response = client.execute(request);
                                        Thread.sleep(15000);
                                }catch(InterruptedException e){
                                       
                                }
                        }
                }catch (Throwable t) {
                       
                }
        }
           
        @Override
        public void onDestroy(){
               
        }
       
        /** Creating google api client object */
    protected synchronized void buildGoogleApiClient() {
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API).build();
    }
 
    /** Google api callback methods */
    public void onConnectionFailed(ConnectionResult result) {
       
    }
 
    public void onConnected(Bundle arg0) {
       
    }
 
    public void onConnectionSuspended(int arg0) {
        mGoogleApiClient.connect();
    }
}

Se provo ad eliminare dal metodo "onHandleIntent" del Service la seguente parte di codice:
Codice (Java): [Seleziona]
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
                                if (mLastLocation != null) {
                                        latitudeDevice = mLastLocation.getLatitude();
                                        longitudeDevice = mLastLocation.getLongitude();
                                }
tutto funziona ma in questo caso sono costretto a dover dare due valori fissi alle variabili della latitudine e della longitudine.

In sostanza il mio scopo finale è quello di lasciare il Service attivo in modo tale che ogni tot di tempo possa ricavarsi le coordinate del dispositivo e vada ad interrogare uno script remoto che si occuperà di interfacciarsi con il DB.

Spero che qualcuno possa darmi una mano per capire cosa sbaglio nell'integrare i servizi di Google all'interno del Service di Android.

Grazie a tutti.

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:[Service + GoogleApiClient] - Stop applicazione
« Risposta #1 il: 08 Marzo 2015, 11:25:49 CET »
0
posta il logcat
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia