Autore Topic: Non riesco a stoppare il Service  (Letto 390 volte)

Offline marcuz89

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G2
  • Sistema operativo:
    Windows 8.1
Non riesco a stoppare il Service
« il: 05 Febbraio 2015, 12:05:43 CET »
0
Salve,
ho un problemino nella mia app. In pratica invoco un service per far partire una determinata notifica. La notifica scatta soltanto se il php che invoca (che ho censurato nel codice per motivi di privacy) mi risponde con la stringa "success"=1. Il codice è perfettamente funzionante, unico neo è il fatto che se vado a ripetere la procedura non riesce più ad entrare dentro il service una seconda volta, me ne accorgo poichè non mi parte la stampa che ho messo dentro l'oncreate.
Pensavo di risolvere mettendo uno stop alla notifica dentro l'ondestroy però non ho risolto. Quindi mi servirebbe un rimedio per interrompere il service e ripetere la procedura senza che ogni volta debba chiudere forzatamente l'applicazione dal dispositivo mobile.

Grazie a chi mi darà una mano. Vi lascio il codice e un'immagine del logcat del momento significativo se vi può essere utile.

Saluti Marco


Codice (Java): [Seleziona]
public class MyAlarmService extends Service
{
     
   private NotificationManager mManager;
   private NotificationManager myNotificationManager;
   private int notificationIdOne = 111;
   private int numMessagesOne = 0;
   AlertDialog dialog;
   


   
   @Override
        public IBinder onBind(Intent intent) {
                Toast.makeText(this, "Servizio in Background: ServizioSincronizzazione.onBind()", Toast.LENGTH_LONG).show();
                return null;
        }
       
        @Override
        public boolean onUnbind(Intent intent) {       
                Toast.makeText(this, "Servizio in Background: ServizioSincronizzazione.onUnbind()", Toast.LENGTH_LONG).show();
                return super.onUnbind(intent);
        }
       
    @Override
    public void onCreate()
    {
       
       // TODO Auto-generated method stub  
           super.onCreate();
           System.out.println("Sto dentro il Service");
           new Libera().execute();
                       
         //prendo la variabile globale stato occupazione       
                        /*final GlobalClass global= (GlobalClass) getApplicationContext();
                                        final int statoccupazione = global.getOcc();
                                        System.out.println("My Alarm Service "+statoccupazione);*/

                                       
                                       
       
       
    }
   
        protected void displayNotificationOne() {
               
    // Invoking the default notification service
    Notification.Builder  mBuilder = new Notification.Builder(this);   

    //per inserire una notifica customizzata, inserire un file .mp3 nella cartella res/raw
    Uri uri =Uri.parse("android.resource://" + getPackageName() + "/"+ R.raw.prenotazione_voce);
    //Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    mBuilder.setSound(uri);
   
    mBuilder.setContentTitle("ATTENZIONE");
    mBuilder.setContentText("Prenotazione scaduta!!");
    mBuilder.setTicker("Prenotazione scaduta");
    mBuilder.setSmallIcon(R.drawable.download);

    // Increase notification number every time a new notification arrives
    mBuilder.setNumber(++numMessagesOne);
   
    // Creates an explicit intent for an Activity in your app
    Intent resultIntent = new Intent(this, MenuActivity.class);
    resultIntent.putExtra("notificationId", notificationIdOne);

    //This ensures that navigating backward from the Activity leads out of the app to Home page
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    // Adds the back stack for the Intent
    stackBuilder.addParentStack(MenuActivity.class);

    // Adds the Intent that starts the Activity to the top of the stack
    stackBuilder.addNextIntent(resultIntent);
    PendingIntent resultPendingIntent =
       stackBuilder.getPendingIntent(
          0,
          PendingIntent.FLAG_ONE_SHOT //can only be used once
       );
    // start the activity when the user clicks the notification text
    mBuilder.setContentIntent(resultPendingIntent);

    myNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    // pass the Notification object to the system
    myNotificationManager.notify(notificationIdOne, mBuilder.build());

    }


        /////////////////////////////////////////////////////////////////////////////////////////////////////////////
        private class Libera extends AsyncTask<String, String, String> {
                private final String url="MIO PHP";
                //private ProgressDialog pd;
               
                protected void onPreExecute() {
                super.onPreExecute();
               
        }

                @Override
                protected String doInBackground(String... params) {

                        JSONParser jsonParser = new JSONParser();
                        //prendo la variabile globale mail             
                        final GlobalClass globalVariable = (GlobalClass) getApplicationContext();
                                        final String email = globalVariable.getMail();
                       
                        // mando via POST la variabile mail
                                                List<NameValuePair> par = new ArrayList<NameValuePair>(1);
                                                par.add(new BasicNameValuePair("mail", email));
                                                JSONObject json = jsonParser.makeHttpRequest(url, "POST", par);
                                               
                       
                        try {
                                int success = json.getInt("success");
                                System.out.println("My Alarm Service "+success);
                                   if (success == 1){
                                          displayNotificationOne();
                                   }
                                }
                                                               
                          catch (JSONException e) {e.printStackTrace();}
                       
                        return null;
                }
               
                protected void onPostExecute(String result){
                        //pd.dismiss();
                }              
               
        }      


 
    @Override
    public void onDestroy()
    {
         super.onDestroy();
        // TODO Auto-generated method stub
        myNotificationManager.cancel(notificationIdOne);
        // Tell the user we stopped.
        System.out.println("Service interrotto");
        //Toast.makeText(this, "Il servizio si è interrotto", Toast.LENGTH_SHORT).show();
     
    }
 
}

Offline marcuz89

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G2
  • Sistema operativo:
    Windows 8.1
Re:Non riesco a stoppare il Service
« Risposta #1 il: 10 Febbraio 2015, 11:10:08 CET »
0
ho risolto implementando la funzione stopservice dentro una activity, al momento di un clic di un bottone. E' possibile rendere la procedura automatica?