Autore Topic: post data in un service  (Letto 460 volte)

Offline nfnvcn

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    huawei y300
  • Sistema operativo:
    windows 7
post data in un service
« il: 28 Gennaio 2015, 09:41:03 CET »
0
Ho creato un app che alla pressione di un tasto fa partire un service che fa le seguenti cose:

- richiede posizione ai due location provider;
- dopo 20 sec. rimuove gli update dei location provider
- passa i dati via http post ad un db
- passa informazioni alla main activity per visualizzazione

L app funziona benissimo, il mio problema sta che quando al tasto voglio ripetere piu volte (ogni 10 min ad es) non effettua il post data con il relativo asynctask, ma cmq continua a processare bene il resto.Posto il service e poi l alarm manager che uso alla pressione del tasto.
Codice (Java): [Seleziona]
public class fftsrv extends Service {

    [code=java][code=java][code=java]public Handler lhandler = new Handler();
    private String slat, slong,sdate,salt,sspeed,imei,nettime,netlat,netlong,user;
 
    private double lat,longi,nlat,nlong;
    public static final String ACTION_fftsrv = "com.example.fftmobile.RESPONSE";
    public static final String EXTRA_SLAT = "EXTRA_SLAT";
    public static final String EXTRA_SLONG = "EXTRA_SLONG";
    public static final String EXTRA_SALT = "EXTRA_SALT";
    public static final String EXTRA_SSPEED = "EXTRA_SSPEED";
    public static final String EXTRA_NETLAT = "EXTRA_NETLAT";
    public static final String EXTRA_NETLONG = "EXTRA_NETLONG";
    public static final String EXTRA_NETTIME = "EXTRA_NETTIME";
   
   
    private   LocationListener gpslocationListener = new LocationListener()
    {
        public void onLocationChanged(Location loc)
        {   updateLocationData(loc);                                    
               
        }
        public void onStatusChanged(String provider, int status, Bundle extras) {}
        public void onProviderEnabled(String provider) {

                   
        }
       
        public void onProviderDisabled(String provider) {
               
        }                          
    };  



        private   LocationListener netlocationListener = new LocationListener()
    {
        public void onLocationChanged(Location loc)
        {  updateLocationDatanet(loc);                                      
               
        }
        public void onStatusChanged(String provider, int status, Bundle extras) {}
        public void onProviderEnabled(String provider) {
                       
        }
        public void onProviderDisabled(String provider) {}                          
    };  

 
    @Override
    public void onCreate() {
       
       
        super.onCreate();
       
         
    }
   
   

    @Override
   
    public int onStartCommand(Intent intent, int flags, int startId) {
        user = intent.getStringExtra("username");
       
            imei=intent.getStringExtra("imei");
       
       
       
           
                 

         LocationManager locationManager = (LocationManager) getSystemService( LOCATION_SERVICE );
         
               
           
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10, 0, gpslocationListener);  
            locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10, 0, netlocationListener);        
           
            boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

         
             if (!gpsEnabled){
         
                  lat=0;
                  longi=0;
                  salt="";
                      slong="";
                      slat="";
                      sspeed="";
                      sdate="";
              }
       
             
             lhandler.postDelayed(new Runnable() {
                 public void run() {
             LocationManager locationManager = (LocationManager) getSystemService( LOCATION_SERVICE );

             locationManager.removeUpdates(gpslocationListener);
             locationManager.removeUpdates(netlocationListener);
         
                   new Task().execute(slat,slong,salt,sspeed,sdate,user,imei,nettime,netlat,netlong);
                                                 
         
                           
           Intent intentResponse = new Intent();
           intentResponse.setAction(ACTION_fftsrv);
         
           intentResponse.putExtra(EXTRA_SLAT, lat);
           intentResponse.putExtra(EXTRA_SLONG, longi);
           intentResponse.putExtra(EXTRA_SALT, salt);
           intentResponse.putExtra(EXTRA_SSPEED, sspeed);
           intentResponse.putExtra(EXTRA_NETLAT, nlat);
           intentResponse.putExtra(EXTRA_NETLONG, nlong);
           intentResponse.putExtra(EXTRA_NETTIME, nettime);
           sendBroadcast(intentResponse);

                               
           
                 }
            }, 20000);
           
             
           
         
           
       
        return START_NOT_STICKY;
       
     }

   
   
    @Override
    public IBinder onBind(Intent intent) {
        // We don't provide binding, so return null
        return null;
    }

    @Override
    public void onDestroy() {
      Toast.makeText(this, "Service Stopped", Toast.LENGTH_SHORT).show();
   
    super.onDestroy();
    }

private class Task extends AsyncTask<String, Void, Void> {

                       
                         

                    @Override
                    protected Void doInBackground(String... params) {
                        postData(params);
                       

                     return null;
                    }
                   
                    public Void postData(String valueIWantToSend[]) {

                        HttpClient httpclient = new DefaultHttpClient();
                       HttpPost httppost = new HttpPost(""http://www.xxxx.it");

                       
                       
                        try {
                            ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                            nameValuePairs.add(new BasicNameValuePair("latitudine_gps", valueIWantToSend[0]));
                            nameValuePairs.add(new BasicNameValuePair("longitudine_gps", valueIWantToSend[1]));
                            nameValuePairs.add(new BasicNameValuePair("altitudine_gps", valueIWantToSend[2]));
                            nameValuePairs.add(new BasicNameValuePair("velocita_media_gps", valueIWantToSend[3]));
                            nameValuePairs.add(new BasicNameValuePair("data_remota_gps", valueIWantToSend[4]));
                            nameValuePairs.add(new BasicNameValuePair("identificativo", valueIWantToSend[5]));
                            nameValuePairs.add(new BasicNameValuePair("imei", valueIWantToSend[6]));
                            nameValuePairs.add(new BasicNameValuePair("data_remota_net", valueIWantToSend[7]));
                            nameValuePairs.add(new BasicNameValuePair("latitudine_net", valueIWantToSend[8]));
                            nameValuePairs.add(new BasicNameValuePair("longitudine_net", valueIWantToSend[9]));
                            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                            httpclient.execute(httppost);
                           
                        }
                        catch(Exception e)
                        {
                            Log.e("log_tag", "Error:  "+e.toString());
                        }

                       
                       
                        return null;


        }}
               
               
               
                private void updateLocationData(Location location) {
                         
                         Date timestamp = new Date(location.getTime());
                         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); // the format of your date
                     sdf.setTimeZone(TimeZone.getTimeZone("GMT+1")); // give a timezone reference for formating (see comment at the bottom
                         sdate=sdf.format(timestamp);
                       
                       
                         lat=location.getLatitude();
                         slat= String.valueOf(lat);
                         longi=location.getLongitude();
                         slong=String.valueOf(longi);
                         
                         
                         if (location.hasAltitude()) {
                         double altitude = location.getAltitude();
                         salt=String.valueOf(altitude);
                         
                         }
                         if (location.hasSpeed()) {
                         float speed = location.getSpeed();
                         sspeed=String.valueOf(speed);
                         
                         }
                        }
                       
                       
                private void updateLocationDatanet (Location netlocation)
                        {
                       
                        long unixtime = netlocation.getTime();
                       
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); // the format of your date
                        sdf.setTimeZone(TimeZone.getTimeZone("GMT+1")); // give a timezone reference for formating (see comment at the bottom
                        nettime = sdf.format(unixtime);
                       
                       
                   
                        nlat=netlocation.getLatitude();
                    netlat=String.valueOf(nlat);
                   
                    nlong=netlocation.getLongitude();
                    netlong=String.valueOf(nlong);
                   
                        }
}
SEgue l alarmManager:
Codice (Java): [Seleziona]
Intent i = new Intent(LocationDemoActivity.this, fftsrv.class);
PendingIntent pintent = PendingIntent.getBroadcast(LocationDemoActivity.this, 0, i, 0);
 Calendar cal= Calendar.getInstance();
AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
 alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 5*60000, pintent);
 
« Ultima modifica: 28 Gennaio 2015, 09:55:30 CET da nfnvcn »

Offline tonno16

  • Utente storico
  • *****
  • Post: 1231
  • Respect: +60
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re: post data in un service
« Risposta #1 il: 28 Gennaio 2015, 09:47:53 CET »
0
Edita col tag code

Offline nfnvcn

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    huawei y300
  • Sistema operativo:
    windows 7
Re: post data in un service
« Risposta #2 il: 28 Gennaio 2015, 09:56:47 CET »
0
Grazie, sono nuovo sul forum e anche nella programmazione per android