2012-03-23 3 views
0

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

код в цикле каждые 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); 
    } 
} 

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

Что нужно делать на самом деле ... Выполнение службы через 5 секунд na ??? –

+0

Вы хотите создать файл со случайным именем в внешнем хранилище пользователей каждые 5 секунд, начиная с момента загрузки телефона. Почему мы должны помочь вам в этом? – CaseyB

+0

Я изменил его, чтобы создать файл, чтобы иметь возможность его проверить .... на самом деле это не то, что я хочу делать (создать файл). Но да, на этом коде я хочу создать файл каждые 5 секунд и после 5 циклов уничтожить службу навсегда – rami78

ответ

2

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

+0

в предыдущем вопросе у меня был пользователь с хорошей репутацией мне не работать обработчик. но спасибо .... этот метод я знаю, что работает, но он не подходит для меня .. спасибо в любом случае – rami78

+0

я, наконец, сделал это с обработчиком. спасибо – rami78

+0

Есть ли шанс, что вы можете проголосовать за мой ответ? :) – drasticp

0

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

0

попробовать, как это ..

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

, где я должен добавить это? в какой класс? – rami78

+0

положите это в свой основной вид деятельности. – 5hssba

+0

, но будет ли это работать после перезагрузки? И с закрытием приложения? На самом деле, я ищу кого-то, чтобы помочь исправить мой текущий код. Я думаю, что диспетчер аварийной сигнализации с широковещательным приемником это лучшее решение для меня ... – rami78