2013-08-25 43 views
3

我有要运行的代码每天;为此,我正在尝试使用AlarmManager。这是我对触发报警代码:Android中的AlarmManager

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

    Intent i = new Intent(this, AlarmReciever.class); 
    PendingIntent pi = PendingIntent.getService(this, 0, i, 0); 
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
    am.cancel(pi); // cancel any existing alarms 
    am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, 
     SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_DAY, 
     AlarmManager.INTERVAL_DAY, pi); 
} 

的这部分代码在调用AlarmReciever类如预期,但我想在AlarmReciever类的代码,每天执行一次。它被称为多次。我如何限制它?

这是AlarmReciever类:

public class AlarmReciever extends BroadcastReceiver { 

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

     System.out.println("in alarm reciever class"); 

    } 
} 

我想在onReceive()方法执行一些业务逻辑。

在manifest.xml文件:

<receiver android:name="com.xyz.reciever.AlarmReciever"></receiver> 

<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> 

声明。

+0

你的意思是它不断令人震惊? – kabuto178

+0

@ kabuto178是它不断警惕....我在AlarmReciever类中有一个sysout,并且它的打印不断...没有像预期的那样。 –

+1

您是否尝试使用日历对象作为时间参考? – kabuto178

回答

0

我相信你应该使用设置你的报警代码将是这样的:

Intent i = new Intent(this, AlarmReciever.class); 
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);  // <- HERE!! 
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
am.cancel(pi); // cancel any existing alarms 
am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, 
    SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_DAY, 
    AlarmManager.INTERVAL_DAY, pi); 

因为你AlarmRecieverBroadcastReceiver。使用PendingIntent.getBroadcast()

如果您在接收方的onReceive()方法中有很多工作要做,您也可以将其委派给IntentService。如果您决定这样做,请致电See this answer

+0

当使用'PendingIntent.getBroadcast()'时,'AlarmReciever'类不被调用。 –

+1

@AnilM,您需要确保接收器列在AndroidManifest.xml文件中。例如''receiver android:name ='your.mypackage.AlarmReceiver'>'。你可以[看到这个更完整的关于如何使用AlarmManager的教程](http://www.javacodegeeks.com/2012/09/android-alarmmanager-tutorial.html) – Nate

+0

@AnilM,同时,确保拼写在清单xml文件中匹配代码中的拼写。你实际上拼写错误'AlarmReceiver'(我<-> e)...但重要的是拼写匹配,当然。 – Nate