2012-03-23 117 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); 
    } 
} 

清單代碼

<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 ??? – 2012-03-23 14:29:37

+0

您希望從手機啓動開始每5秒鐘在用戶外部存儲器中創建一個隨機名稱的文件。我們爲什麼要幫你做到這一點? – CaseyB 2012-03-23 14:31:37

+0

我改變它創建一個文件,以便能夠檢查....實際上它不是我想做的工作(創建文件)。但是,對於此代碼,我希望每5秒創建一個文件並在5個循環永久銷燬服務 – rami78 2012-03-23 14:36:16

回答

2

使用Handler.postDelayed(Runnable的R,長delayMillis)。你不需要定時器或鬧鐘管理器來做你想做的事情。保持簡單。

+0

在上一個問題我有一個良好的信譽建議用戶我不要工作處理程序。但謝謝....這種方法,我知道的作品,但它不適合我..謝謝無論如何 – rami78 2012-03-23 14:39:56

+0

我終於用處理程序。謝謝 – rami78 2012-03-23 15:33:12

+0

任何機會,你可以投我的答案? :) – drasticp 2012-04-10 15:49:46

0

嘗試使用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 2012-03-23 14:38:21

+0

把它放在你的主要活動中。 – 5hssba 2012-03-23 14:42:05

+0

但是在重新啓動後它仍然工作嗎?並與應用程序關閉?實際上,我正在尋找某人將有助於修復我目前的code.I認爲與廣播接收器的報警管理器這是我的最佳解決方案... – rami78 2012-03-23 14:44:28