CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: complicazio con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 11 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 34 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 3 su 3
Discussione:

ciclo vita dei service.. dubbi...

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    Feb 2011
    Messaggi
    44

    Ringraziamenti
    0
    Ringraziato 1 volta in 1 Post
    Predefinito

    ciclo vita dei service.. dubbi...

    Qualcuno mi spiega cosa accade quando stoppo un servizio?

    Ho un servizio attivabile e fermabile da una activity con i 2 bottoni relativi.

    sul tasto "stop" richiamo

    serviceIntent = new Intent(this,Servizio.class);
    stopService(serviceIntent);

    Dai log vedo che regolarmente viene richiamato il metodo onDestroy(), dal quale unregistro i broadcastreceiver che avevo creato, e poi faccio stopSelf();

    Solo che non si ferma...

    Ho aggiunto una boolean "running" e ora prima di qualsiasi cosa verifico che running sia a true, e sul destroy prima di fare altro la metto a false, e ho ottenuto che il service non faccia nulla se la variabile running è a false.

    Non fa nulla, ma è VIVO! come faccio ad ammazzarlo?

  2.  
  3. #2
    Androidiano L'avatar di Jordano


    Registrato dal
    Nov 2010
    Località
    Reggio Emilia
    Messaggi
    263
    Smartphone
    Nexus S / HTC Magic 32a

    Ringraziamenti
    1
    Ringraziato 48 volte in 46 Posts
    Predefinito

    se fai le cose correttamente, con stopService lo stoppi e non rimane più attivo.

    evidentemente c'è qualcos'altro che non va, così senza codice mi sembra difficile cavarne fuori qualcosa se non spulciando i fondi del caffè.

  4. #3
    Baby Droid


    Registrato dal
    Feb 2011
    Messaggi
    44

    Ringraziamenti
    0
    Ringraziato 1 volta in 1 Post
    Predefinito

    Posto un po' di codice allora...

    codice:
    public class ServizioTelefonate extends Service {
    
    	private int notifiche;
    	private Notification notification;
    	private Notification servicenotification;
    	private PendingIntent pIntent;
    	private PendingIntent pIntent2;
    	private int notificationNumber;	
    	private NotificationManager notificaservizio;
    	private NotificationManager notificationManager2;
    	private BroadcastReceiver br;
    	private BroadcastReceiver br2;
    	
    	private static final String ADMINPREF="adminpref";
    	private static final String CONTATTIDAINSERIRE = "contattidainserire";
    	private static final String LASTUPDATE="lastupdate";
    	private static final String NUMEROCONTATTI = "numerocontatti";
    
    	boolean running=true;
    	long inizio=0;
    	 long fine=0;
    	 long durata=0;
    	 String telefono="no number";
    	 String azienda= "-";
    	 int numeronotifica=100;
    	
    	@Override
    	public IBinder onBind(Intent arg0) {
    	return null;
    	}
    	
    	@Override
    	public void onCreate() {
    		super.onCreate();
    		ServizioOnAir();
    
    
    		br=new BroadcastReceiver(){ 
    
    	        @Override 
    	        public void onReceive(Context context, Intent intent) { 
    	            try {
    
    
    	            	   if ((intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL"))&&(running)) {
    					       if  (!(intent.getExtras().getString("android.intent.extra.PHONE_NUMBER")==null)){
    	            		   telefono = intent.getExtras().getString("android.intent.extra.PHONE_NUMBER");
    	            		   }
    					       }
    					       else {telefono = "numero nascosto";}
    					       inizio=Calendar.getInstance().getTimeInMillis();
    					      }
    	            	  
    
    	            } catch (Exception e) {
    	            }
    	          	            
    	        } 
    
    	    };
    		
    		this.registerReceiver(br,new IntentFilter("android.intent.action.NEW_OUTGOING_CALL")); 
    
    		try{
    			TelephonyManager telephonyManager=(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    			PhoneStateListener listener;
    			 listener = new PhoneStateListener() {
    
    				 int statoprecedente=TelephonyManager.CALL_STATE_IDLE;
    				 @Override
    			      public void onCallStateChanged(final int state, String incomingNumber) {
    			    	  
    
    					  if (running){
    			        switch (state) {
    			       
    			        case TelephonyManager.CALL_STATE_IDLE:
    			        	
    			        	fine=Calendar.getInstance().getTimeInMillis();
    			        	 if ((statoprecedente==TelephonyManager.CALL_STATE_OFFHOOK)&&(running)){
    			        		durata=fine-inizio;
    			        		notificatelefonata("telefonata con: "+telefono,numeronotifica,telefono,inizio,fine,azienda);
    			        		numeronotifica++;
    			        	}
    			        	 statoprecedente=TelephonyManager.CALL_STATE_IDLE;
    			        	
    			        	
    			          
    			          break;
    			        case TelephonyManager.CALL_STATE_OFFHOOK:
    			        	
    			        	 if (statoprecedente==TelephonyManager.CALL_STATE_RINGING){
    			        		 
    			        	 }else{
    			        		 
    			                 
    			        	 }
    			        	 statoprecedente=TelephonyManager.CALL_STATE_OFFHOOK;
    			        	 inizio=Calendar.getInstance().getTimeInMillis();
    			        	 
    			          break;
    			        
    			        case TelephonyManager.CALL_STATE_RINGING:
    
    				       if  (!(incomingNumber==null)){
    	            		   telefono = incomingNumber;
    	            		   }
    	            		   
    					       else {telefono = "numero nascosto";}
    			          
    			          statoprecedente=TelephonyManager.CALL_STATE_RINGING;
    
    			          break;
    			        }
    
    			      
    					}
    				}
    			      
    			   };
    	    telephonyManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
    		
    		}catch(Exception ie){}
    	}
    
    	
    	public void notificatelefonata(String notificatelefonata,int tag,String num, long inizio, long fine,String azienda) {
    
    //notifico la telefonata con un intente che poi mi lancia una activity...
    
    	}
    	
    	
    	public void ServizioOnAir() {
    
    // metto una notifica sul servizio attivo
    
    	}
    	
    	
    
    
    	@Override
    	public void onDestroy() {
    		running=false;
    		this.unregisterReceiver(br);
    		Log.i(LOG_TAG, "unregistrato br");
    		notificaservizio = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    		notificaservizio.cancel(10);
    		this.stopSelf();
    		super.onDestroy();
    
    	}
    	
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy