Служба Android loop каждые 5 секунд и загрузка при запуске - PullRequest
0 голосов
/ 23 марта 2012

У меня есть код ниже, и я хочу повторить это каждые 5 секунд. Я пытался использовать вещательный приемник и менеджер тревог, но безуспешно. Я хочу, чтобы мой сервис зациклился 5 раз и после этого окончательно остановился. Это второй вопрос, который я публикую. Пожалуйста, кто-нибудь, помогите мне исправить код, я нахожусь на моем Mac в течение 2 дней. Любая помощь будет оценена.

Код для повторения каждые 5 секунд

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

Сервис 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);
    }
}

Сервис 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);
    }
}

Манифест-код

<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>

Ответы [ 3 ]

2 голосов
/ 23 марта 2012

Использовать Handler.postDelayed (Runnable r, long delayMillis). Вам не нужны таймеры или менеджер аварийных сигналов, чтобы делать то, что вы хотите. Оставайтесь простыми.

0 голосов
/ 23 марта 2012

попробуйте вот так ..

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

Класс 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 голосов
/ 23 марта 2012

Попробуйте использовать таймер вместо Календаря и посмотрите, подходит ли это вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...