2013-07-11 78 views
1

嗨,謝謝你的幫助。PendingIntents:爲什麼只有2件作品中的一件?

請我試着在一週內使用AlarmManager來啓動和停止活動。

現在我面臨這個我不明白的問題。

對於一週的每一天,我創建2個PendingIntents:

  • 一個用於啓動活動
  • 一個殺死活性

你可以看到下面的代碼。

現在的問題是:

- 只有第二的PendingIntent打完

(並開始活動,thereticaally,應立即停止,但由於第一的PendingIntent從未熄滅第二的PendingIntent啓動該活動而不是關閉它)。

- 顯然第一個PendingIntent永遠不會關閉!

 /INTENT THAT SHOULD START THE ACTIVITY 
     Intent sthu = new Intent(ctxt, VideoActivty.class); 

     PendingIntent psthu = PendingIntent.getActivity(ctxt, 0, sthu, 0); 

     Calendar calSet7 = Calendar.getInstance(); 

     calSet7.set(Calendar.MONTH, c.get(Calendar.MONTH)); 
     calSet7.set(Calendar.YEAR, c.get(Calendar.YEAR)); 
     calSet7.set(Calendar.DAY_OF_WEEK, 5); 
     calSet7.set(Calendar.HOUR_OF_DAY, hsthu); 
     calSet7.set(Calendar.MINUTE, msthu); 
     calSet7.set(Calendar.SECOND, 0); 
     calSet7.set(Calendar.MILLISECOND, 0); 

     mgr.setRepeating(AlarmManager.RTC_WAKEUP, calSet7.getTimeInMillis(), 
       7 * 24 * 60 * 60 * 1000, psthu); 

     // INTENT THAT SHOULD KILL THE ACTIVITY 
     Intent fthu = new Intent(ctxt, VideoActivty.class); 
     fthu.putExtra("finish", true); 
     PendingIntent pfthu = PendingIntent.getActivity(ctxt, 0, fthu, 0); 
     Calendar calSet8 = Calendar.getInstance(); 
     calSet8.set(Calendar.MONTH, c.get(Calendar.MONTH)); 
     calSet8.set(Calendar.YEAR, c.get(Calendar.YEAR)); 
     calSet8.set(Calendar.DAY_OF_WEEK, 5); 
     calSet8.set(Calendar.HOUR_OF_DAY, hfthu); 
     calSet8.set(Calendar.MINUTE, mfthu); 
     calSet8.set(Calendar.SECOND, 0); 
     calSet8.set(Calendar.MILLISECOND, 0); 

     mgr.setRepeating(AlarmManager.RTC_WAKEUP, calSet8.getTimeInMillis(), 
       7 * 24 * 60 * 60 * 1000, pfthu); 

後建議的修改:

顯然現在只有1號的PendingIntent熄滅:

 Intent sthu = new Intent(ctxt, VideoActivty.class); 
     sthu.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     PendingIntent psthu = PendingIntent.getActivity(ctxt, 1, sthu, 0); 

     Calendar calSet7 = Calendar.getInstance(); 

     calSet7.set(Calendar.MONTH, c.get(Calendar.MONTH)); 
     calSet7.set(Calendar.YEAR, c.get(Calendar.YEAR)); 
     calSet7.set(Calendar.DAY_OF_WEEK, 5); 
     calSet7.set(Calendar.HOUR_OF_DAY, hsthu); 
     calSet7.set(Calendar.MINUTE, msthu); 
     calSet7.set(Calendar.SECOND, 0); 
     calSet7.set(Calendar.MILLISECOND, 0); 

     //calSet.setTimeZone(TimeZone.getTimeZone("UTC")); 
     mgr.setRepeating(AlarmManager.RTC_WAKEUP, calSet7.getTimeInMillis(), 
       7 * 24 * 60 * 60 * 1000, psthu); 
     Log.e("","setto alarm per giovedì"); 
     // INTENT 
     Intent fthu = new Intent(ctxt, VideoActivty.class); 
     fthu.putExtra("finish", true); 
     PendingIntent pfthu = PendingIntent.getActivity(ctxt, 2, fthu, 0); 
     Calendar calSet8 = Calendar.getInstance(); 
     calSet8.set(Calendar.MONTH, c.get(Calendar.MONTH)); 
     calSet8.set(Calendar.YEAR, c.get(Calendar.YEAR)); 
     calSet8.set(Calendar.DAY_OF_WEEK, 5); 
     calSet8.set(Calendar.HOUR_OF_DAY, hfthu); 
     calSet8.set(Calendar.MINUTE, mfthu); 
     calSet8.set(Calendar.SECOND, 0); 
     calSet8.set(Calendar.MILLISECOND, 0); 

     mgr.setRepeating(AlarmManager.RTC_WAKEUP, calSet8.getTimeInMillis(), 
       7 * 24 * 60 * 60 * 1000, pfthu); 

二號的PendingIntent的目的是

開展活動(由第一審理機構開始)

要完成自己的活動。

綜上所述:

第一的PendingIntent啓動活動,

第二的PendingIntent到thell活動完成

這裏是活動的代碼:

public class VideoActivty extends Activity { 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    VideoView videoHolder = new VideoView(this); 

    Uri video = Uri.parse("android.resource://" + getPackageName() + "/" 
    + R.raw.ingress); 
    videoHolder.setVideoURI(video); 
    setContentView(videoHolder); 

    videoHolder.start(); 

@Override 
protected void onNewIntent (Intent i){ 
    //HERE I TRY TO TELL THE ACTIVITY (VIA THE SECOND INTENT) TO SHUT DOWN 

    if(i.getBooleanExtra("finish",false)){ 
     finish(); 
    } 
} 

}

+0

什麼時候你想關閉你的活動? –

回答

6

變化的PendingIntent的請求代碼(任一的)。他們不應該是一樣的。

PendingIntent psthu = PendingIntent.getActivity(ctxt, 1 /*Changed Here*/, sthu, 0); 

PendingIntent pfthu = PendingIntent.getActivity(ctxt, 2 /*Changed Here*/, fthu, 0); 

添加Intent.FLAG_ACTIVITY_NEW_TASK到要傳遞到每個PendingIntents兩個意圖。

注意的是,活動將在現有 活動的背景之外啓動,所以你必須在意圖使用Intent.FLAG_ACTIVITY_NEW_TASK 啓動標誌。

瞭解更多關於getActivity


什麼工作對我來說是..

註冊報警僅用於發射活動

AlarmManager mgr = (AlarmManager)(getSystemService(Context.ALARM_SERVICE)); 

     Intent sthu = new Intent(getApplicationContext(), VideoActivty.class); 
     sthu.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     sthu.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

     PendingIntent psthu = PendingIntent.getActivity(getApplicationContext(), 1, sthu, PendingIntent.FLAG_UPDATE_CURRENT); 
     Calendar startWhen = new GregorianCalendar(); 
     startWhen.add(Calendar.MILLISECOND, 1000); 

     //calSet.setTimeZone(TimeZone.getTimeZone("UTC")); 
     mgr.setRepeating(AlarmManager.RTC_WAKEUP, startWhen.getTimeInMillis(), 
       60 * 1000, psthu); 
     Log.e("","setto alarm per giovedì"); 

而且在VideoActivtyonCreate撥打以下方法

private void registerActivityCloseAlarm() { 
     AlarmManager mgr = (AlarmManager)(getSystemService(Context.ALARM_SERVICE)); 
     Intent fthu = new Intent(getApplicationContext(), VideoActivty.class); 
     fthu.putExtra("finish", true); 
     fthu.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     fthu.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     PendingIntent pfthu = PendingIntent.getActivity(getApplicationContext(), 2, fthu, PendingIntent.FLAG_UPDATE_CURRENT); 
     Calendar endWhen = new GregorianCalendar(); 
     endWhen.add(Calendar.MILLISECOND, 2000); 

     mgr.set(AlarmManager.RTC_WAKEUP, endWhen.getTimeInMillis(), pfthu); 
    } 

這將工作

+0

+1完美答案 –

+0

@CapDroid謝謝! –

+0

@Pankaj庫馬爾現在只有第一個火焰熄滅.....: - ((((( –

相關問題