2013-04-01 66 views
0

有些日子是在這裏找到答案,但沒有。BroadcastReceiver並非總是用AlarmManager激發

public class myReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    } 
} 

活動:

public class TestActivity extends Activity { 
private myReceiver rec; 
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
     ... 
     rec = new myReceiver(); // do I really need this? 
     AlarmManager am=(AlarmManager)this.getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(this, myReceiver.class); 
     PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 5 , pi); 
    } 
} 

XML

<application ...> 
... 
<receiver android:name="com.myprj.myReceiver" android:enabled="true"></receiver> 
</application> 

它的工作原理並不總是但是當 「就是了」 :(

注意!:我開始按Ctrl + F11在Eclipse中,並關閉應用程序與後退按鈕,再次Ctrl-F11!所以,在第7次迭代,應用程序工作(在onReceive烤麪包)。我停下來,刪除d ata並開始再次按下Ctrl-F11,在第3次iteraton上工作,並且第5次迭代也在工作......它是什麼?

+0

'它的工作原理並不總是但是當 「就是了」:('它不易消化,請提供準確的信息! 。 – RobinHood

+0

我添加了toast toReceive,更新了我的設備上的應用程序,它開始工作。好。然後,我從手機中刪除我的應用程序,並重新安裝它沒有任何代碼更改,沒有任何工作......我感到困惑。我在AVD中使用我的真實設備。 – user2230842

+0

要更新什麼?而新鮮安裝不起作用,是嗎? – RobinHood

回答

0

,你可以嘗試一些變化(不是所有的都需要)

  1. 變化myReceiver到MyReceiver(:-)其Java命名約定)

  2. 刪除

    rec = new myReceiver();

  3. 給一些未來的時間而不是毫秒的當前時間

    am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000 * 5, 1000 * 5 , pi);

  4. 中的onReceive將調試信息()

    Log.d("MyReceiver", "onReceive");

相關問題