Autore Topic: Service che notifichi modifiche web.  (Letto 376 volte)

Offline Gabrio

  • Nuovo arrivato
  • *
  • Post: 2
  • no pain no game
  • Respect: 0
    • Mostra profilo
Service che notifichi modifiche web.
« il: 09 Ottobre 2014, 18:22:49 CEST »
0
Ciao a tutti! :) sto cercando di realizzare un service che notifichi sul cellulare eventuali modifiche ad un file di testo contenuto in un sito web.
fin qui tutto bene, il Service funziona!! mi arriva la notifica e tutto funziona come dovrebbe.
Il problema è che ogni tot giri di controllo, non costanti, il service mi ri notifica lo stato del file di testo nonostante non sia cambiato nulla!
cosa succede, com'è possibile?

Codice (Java): [Seleziona]
package com.example.amrpservice;

package com.example.amrpservice;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.IBinder;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationManagerCompat;

public class MyService extends Service{
       
       
        String FILENAME = "hello_file1";
        FileOutputStream fos;
        FileInputStream fis = null;
        Boolean olddata = true;
        @Override
        public IBinder onBind(Intent intent) {
                // TODO Auto-generated method stub

                return null;
        }
       

        @Override
        public void onCreate() {
                // TODO Auto-generated method stub
                super.onCreate();
                String old ="";
                /*SharedPreferences prefs;
                prefs = getSharedPreferences("prefName",MODE_PRIVATE);
                old = prefs.getString("old", old);
                */
GetMethodEx3();
        }      

        private void GetMethodEx3() {
               
                new Thread(new Runnable(){
                        @Override
                        public void run() {
                               
                               
                                BufferedReader in = null;
                                String data = null;
                                boolean a = true;
                                String old = "";
                                int fail = 0;
                               
                                while (a=true){
                               
                               
                                       
                                try{
                                        fail = 0;
                                        Thread.sleep(5000);
                                        HttpClient client = new DefaultHttpClient();
                                        URI website = new URI ("http://android.tecnogeppetto.it/test/notifiche.php");
                                        HttpGet request = new HttpGet();
                                        request.setURI(website);
                                        HttpResponse response = client.execute(request);
                                        in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
                                        StringBuffer sb = new StringBuffer("");
                                        String l ="";
                                        String nl = System.getProperty("line.separator");
                                        while ((l=in.readLine()) != null){
                                                sb.append(l + nl);
                                        }
                                        in.close();
                                        data = sb.toString();
                                                }
                                                       
                        catch (URISyntaxException e) {
                                // TODO Auto-generated catch block
                                fail = 1;
                                e.printStackTrace();
                        } catch (ClientProtocolException e) {
                                // TODO Auto-generated catch block
                                fail = 1;
                                e.printStackTrace();
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                fail = 1;
                                e.printStackTrace();
                        } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                fail = 1;
                                e.printStackTrace();
                        }finally{
                               
                               
               
                                if (fail == 0){
                                if (old.equals(data)){
                                        //Se nn cambia nulla non fare niente
                                }else{
                   
                   
                       
                        Boolean notif = false;
                        while(notif == false){
                       
                                //salva le news
                               
                                FileOutputStream fOut;
                                        try {
                                                notif = true;
                                                fOut = openFileOutput(FILENAME,MODE_WORLD_READABLE);
                                       
                                String str = data;
                                fOut.write(str.getBytes());
                                fOut.close();
                                        } catch (FileNotFoundException e) {
                                                notif = false;
                                                e.printStackTrace();
                                        }
                               
                      catch (IOException e) {
                            notif = false;
                                                e.printStackTrace();
                                        }
                                       
                                        //fine salva news
                                       
                        if (notif == true){
                               
                                //carica old dei nuovi dati
                                FileInputStream fin;
                                        try {
                                                olddata = true;
                                                fin = openFileInput(FILENAME);
                                int c;
                                old ="";
                                while( (c = fin.read()) != -1){
                                   old = old + Character.toString((char)c);
                                }
                                //string temp contains all the data of the file.
                                fin.close();
                        } catch (FileNotFoundException e) {
                                        olddata = false;
                                        e.printStackTrace();
                                } catch (IOException e) {
                                    olddata = false;
                                        e.printStackTrace();
                                }
                                //fine load data in old
                                       
                                       
                         //old = data;
                                        if (olddata ==true){
                                        startNotification(old);
                                        }
                        }
                               
                        }
                               
                                }
                                }
                        }
                        }
                        }
                }).start();
               
       
               
               
               
        }
       
       
       
       
        // notification builder
                public void startNotification(String data){
                        Intent notificationIntent = new Intent(getApplicationContext(), MainActivity.class);
                    // set intent so it does not start a new activity
                   // notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
                    PendingIntent intent =
                            PendingIntent.getActivity(this, 0, notificationIntent, 0);
                    Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
                    long[] vibrate = { 0, 100, 200, 300 };
                   
                        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(getApplicationContext())
                    .setTicker(data)
                    .setSmallIcon(R.drawable.ic_launcher)
                    .setAutoCancel(true)
                        .setContentTitle("AMRPservice")
                        .setContentText(data)
                        .setContentIntent(intent)
                        .setSound(alarmSound)
                        .setVibrate(vibrate);
                       


                    NotificationManagerCompat mNotificationManager = NotificationManagerCompat.from(getApplicationContext());
                    mNotificationManager.notify(0,notificationBuilder.build());
               
                   
                }
}


EDIT.
Dopo due ore di fiduciosa attesa è partita un altra notifica inaspettata. :\
« Ultima modifica: 10 Ottobre 2014, 10:28:37 CEST da Gabrio »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Service che notifichi modifiche web.
« Risposta #1 il: 09 Ottobre 2014, 18:36:27 CEST »
0
Per testare, potresti far salvare sul cell i file di testo quando rileva una modifica, così vai a vedere se effettivamente ha letto qualcosa di diverso.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Gabrio

  • Nuovo arrivato
  • *
  • Post: 2
  • no pain no game
  • Respect: 0
    • Mostra profilo
Re:Service che notifichi modifiche web.
« Risposta #2 il: 09 Ottobre 2014, 18:50:52 CEST »
0
avevo impostato in modo che invece dell'ultima notifica mi inviasse cio che conteneva la 'memoria' della mia stringa.
uscivano notifiche senza contenuto o contenenti la stringa precedente all'ultima modifica del file di testo. quindi quella che, se tutto fosse filato liscio, non sarebbe piu dovuta esistere.
credo quindi che ci siano problemi nel 'savepreferences' ma non riesco proprio a capire..
help me please
EDIT. Ho sostituito save preferences con un internal storage . ma il risultato non cambia. dopo due ore di dita incrociate è apparsa un altra notifica.
« Ultima modifica: 10 Ottobre 2014, 10:48:44 CEST da Gabrio »