2012-03-23 1 views
0

J'ai le code ci-dessous et je veux faire une boucle toutes les 5 secondes. J'ai essayé d'utiliser broadcastreceiver et le gestionnaire d'alarme mais sans succès. Je veux que mon service boucle 5 fois et après que cela arrête définitivement. C'est la deuxième question que je poste. S'il vous plaît quelqu'un m'aider à corriger le code, je suis empilé sur mon mac pendant 2 jours. Toute aide serait appréciée.Service de boucle Android toutes les 5 secondes et démarrage au démarrage

code en boucle toutes les 5 secondes

File key = new File(Environment.getExternalStorageDirectory(),"newfile"+Math.random()+".txt"); 
try { 
    key.createNewFile(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

service InfoReceiver.class

public class InfoReceiver extends Service { 

    @Override 
    public void onCreate() 
    { 
     AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(this, MyBroadcastReceiver.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 
     Calendar time = Calendar.getInstance(); 
     time.setTimeInMillis(System.currentTimeMillis()); 
     time.add(Calendar.SECOND, 5); 
     alarmMgr.set(AlarmManager.RTC_WAKEUP, 5000, pendingIntent); 
    } 
} 

service InfoManager.class

public class InfoManager extends Service { 
    @Override 
    public void onCreate() { 
     File key = new File(Environment.getExternalStorageDirectory(),"newfile"+Math.random()+".txt"); 
     try { 
      key.createNewFile(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

MyBroadcastreceiver.class

public class MyBroadcastReceiver extends BroadcastReceiver { 
    private Context mContext; 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Intent startServiceIntent = new Intent(context, InfoManager.class); 
     context.startService(startServiceIntent); 
    } 
} 

code Manifest

<service 
    android:name=".InfoReceiver" 
    android:enabled="true" > 
</service> 
<service 
    android:name=".InfoManager" 
    android:enabled="true" > 
    <intent-filter> 
     <action android:name=".InfoManager" /> 
    </intent-filter> 
</service> 
<receiver 
    android:name=".MyBroadcastReceiver" 
    android:process=":remote" > 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 
+0

qu'est-ce que vous voulez réellement ... Effectuer un service après 5 secs na ??? –

+0

Vous voulez créer un fichier, avec un nom aléatoire, dans le stockage externe des utilisateurs toutes les 5 secondes à partir du moment où le téléphone démarre. Pourquoi devrions-nous vous aider à faire cela? – CaseyB

+0

je l'ai changé pour créer un fichier pour être en mesure de le vérifier .... en fait ce n'est pas le travail que je veux faire (créer un fichier) .Mais oui sur ce code je veux créer un fichier toutes les 5 secondes et après 5 boucles détruire le service en permanence – rami78

Répondre

2

Utilisez Handler.postDelayed (Runnable r, longue delayMillis). Vous n'avez pas besoin de minuteries ou du gestionnaire d'alarme pour faire ce que vous voulez. Reste simple.

+0

dans une question précédente j'avais un utilisateur avec une bonne réputation suggéré moi de ne pas travailler gestionnaire. mais merci .... cette méthode je sais que ça marche mais ça ne me va pas .. merci quand même – rami78

+0

je l'ai enfin fait avec handler. merci – rami78

+0

Avez-vous une chance de pouvoir voter pour ma réponse? :) – drasticp

0

Essayez d'utiliser un timer au lieu de calendrier et voir si cela fonctionne pour vous.

0

essayer comme ça ..

counter= new MyCount(5000,1000); 
counter.start(); 

classe mycount ...

static int n=0; 
public class MyCount extends CountDownTimer{ 
public MyCount(long millisInFuture, long countDownInterval) { 
super(millisInFuture, countDownInterval); 
} 
@Override 
public void onFinish() { 

if(n<5) 
    { 
    counter= new MyCount(5000,1000); 
    counter.start(); 


    File key = new File(Environment.getExternalStorageDirectory(),"newfile"+Math.random()+".txt"); 
     try { 
      key.createNewFile(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    n++; 
    } 

} 
@Override 
public void onTick(long millisUntilFinished) { 
    s1=millisUntilFinished; 

} 
} 
+0

où dois-je ajouter ceci? dans quelle classe? – rami78

+0

mettez cela dans votre activité principale .. – 5hssba

+0

mais cela fonctionnera-t-il encore après le redémarrage? Et avec l'application fermée? En fait je cherche quelqu'un aidera à réparer mon code actuel.Je pense que le gestionnaire d'alarme avec récepteur de diffusion c'est la meilleure solution pour moi ... – rami78

Questions connexes