2014-11-22 65 views
2

我已經看了一些指南,我已經基本上做到了這一點:設置AlarmManager在Android應用未運行時運行?

Main.java

public class Main extends Activity 
{ 
    PendingIntent pendingIntent; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("America/New_York")); 

     cal.set(Calendar.HOUR_OF_DAY, 22); 
     cal.set(Calendar.MINUTE, 0); 
     cal.set(Calendar.SECOND, 0); 

     Intent myIntent = new Intent(Main.this, Receiver.class); 
     pendingIntent = PendingIntent.getBroadcast(Main.this, 0, myIntent,0); 

     AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
     alarmManager.set(AlarmManager.RTC, cal.getTimeInMillis(), pendingIntent); 
    } 
} 

Receiver.java

public class Receiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Toast.makeText(context, "I'm running", Toast.LENGTH_SHORT).show(); 
    } 
} 

AndroidManifest.xml還含有<receiver android:name=".Receiver"/>

因此,從我讀過的內容來看,無論該應用程序是否實際運行,上述代碼在紐約下午10點都應該顯示toast。目前,即使應用程序正在運行,它也不會執行任何操作。它看起來像Receiver類甚至沒有被稱爲。我錯過了什麼?

回答

0

我發現問題(正如暗示我here):我的Main.javaReceiver.java文件沒有放在同一個包中。我不明白這背後的邏輯。我喜歡將我的java文件分離到不同的包中用於組織目的,但顯然Android不喜歡這樣。

如果任何人都可以告訴我如何在src下的兩個不同的包/文件夾中使用java文件執行上述操作,我會做出正確答案。

+0

你的答案是正確的答案,現在你問另一個。恕我直言,你應該發佈另一個問題,但不是在這裏。 1Q = 1A – deadfish 2015-02-02 13:19:21

0

您是否註冊了Receiver with intent-filter? 像下面

 <intent-filter android:priority="2147483647" > 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
     </intent-filter> 
+0

對不起。我不明白。請舉一個例子。 – user2323030 2014-11-22 06:37:21

+0

再次抱歉。你能解釋清單中我應該放置這個「intent-filter」的位置嗎?什麼是'android:priority',你爲什麼將它設置爲那個數字?是'android.net.conn.CONNECTIVITY_CHANGE'正是我應該複製或應該是我的情況下的其他東西? – user2323030 2014-11-22 07:10:31

0

當調整時間分量爲Calendar對象,只有那些專門設置被修改。如果您想在晚上10點發出警報,則還需要設置Calendar.MINUTE的值。例如,如果你在下午6點47分運行你的應用程序,那麼你的鬧鐘正如你所設置的那樣,正在爲下午10:47設置。

+0

謝謝你的澄清。我已經做到了,所以時間組件更具體。但是,仍然沒有發生。 – user2323030 2014-11-22 07:08:29

+0

如果你正在運行這個確切的代碼,它不會再發射大約20個小時。一些調試注意事項:如果你在那個時區,你不需要在日曆的構造函數中指定它。此外,如果您在過去設置了鬧鐘,它會立即啓動。 – 2014-11-22 07:11:38

+0

我沒有運行這個確切的代碼(即在晚上10點離開)。每次運行應用程序時,我都會在一分鐘或更短的時間內調整小時/分鐘/秒參數,以便檢查並且沒有任何反應。 – user2323030 2014-11-22 07:13:09