Android如何每x小时或分钟执行一次方法

时间:2014-08-08 15:59:56

标签: java android

我尝试使用警报服务运行名为Updater()的方法,并且我希望它每1分钟更新一次,最后每2小时更新一次。如果切换按钮打开,则Sceduled任务在计时器上自行执行,并在切换按钮关闭时停止计时器 到目前为止这是我的代码。有人可以告诉我,我做错了吗?

 public class AlarmReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent) {
        Updater();
    }
}
public void autoUpdateClick(View view)
{
    AlarmManager alarmManager=(AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(this,AlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
    boolean on = ((ToggleButton) view).isChecked();
    if (on)
    {
      alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),30000,pendingIntent);
        Toast.makeText(getBaseContext(),"Check-In will be done every 2 hours",Toast.LENGTH_SHORT).show();
    }
    else
    {
     alarmManager.cancel(pendingIntent);
        Toast.makeText(getBaseContext(),"Manual Check-In enabled",Toast.LENGTH_SHORT).show();
    }

}

1 个答案:

答案 0 :(得分:6)

正如您所提到的,我们将安排警报在将来的特定时间执行方法。

我们将有两个班级

  1. MainAcitvity:在本课程中,我们将安排闹钟 在特定时间触发。
  2. AlarmReciever:报警时 在预定的时间触发,此类将收到警报,并且 执行方法。
  3. AlarmReciever类扩展了BroadcastReceiver并覆盖了onRecieve()方法。在onReceive()内,您可以根据需要开始活动或服务,就像您可以开始活动来振动电话或拨打电话

    需要许可 我们需要在我们的应用程序中使用AlarmManger的权限,所以不要忘记在清单文件中声明权限

    AndroidManifest文件

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.test.src"
        android:versionCode="1"
        android:versionName="1.0" >
    
            <uses-sdk android:minSdkVersion="8"
                             android:targetSdkVersion="17" />
             <!-- permission required to use Alarm Manager -->
            <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
    
    
            <application
                     android:icon="@drawable/ic_launcher"
                     android:label="Demo App" >
                    <activity
                               android:name=".MainActivity"
                               android:label="Demo App" >
                              <intent-filter>
                                           <action android:name="android.intent.action.MAIN" />
                                           <category android:name="android.intent.category.LAUNCHER" />
                              </intent-filter>
                   </activity>
    
    
                <!-- Register the Alarm Receiver -->
                       <receiver android:name=".AlarmReciever"/> 
    
             </application>
    </manifest>
    

    main.xml中

    <LinearLayout
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:orientation="vertical"
        android:gravity="center_vertical"
        xmlns:android="http://schemas.android.com/apk/res/android">
    
    
    <TextView
        android:id="@+id/textView1"
        android:gravity="center_horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Alarm Manager Example"
        android:textAppearance="?android:attr/textAppearanceLarge" />
    
    <Button
        android:id="@+id/button1"
        android:layout_marginTop="25dp"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Schedule The Alarm" 
        android:onClick="scheduleAlarm"/>
    
    </LinearLayout>
    

    MainActivity.java

    public class MainActivity extends Activity
    {
           @Override
           public void onCreate(Bundle savedInstanceState) 
          {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.main);
          }
    
        public void scheduleAlarm(View V)
        {
                // time at which alarm will be scheduled here alarm is scheduled at 1 day from current time, 
                // we fetch  the current time in milliseconds and added 1 day time
                // i.e. 24*60*60*1000= 86,400,000   milliseconds in a day        
                Long time = new GregorianCalendar().getTimeInMillis()+24*60*60*1000;
    
                // create an Intent and set the class which will execute when Alarm triggers, here we have
                // given AlarmReciever in the Intent, the onRecieve() method of this class will execute when
                // alarm triggers and 
                //we call the method inside onRecieve() method pf Alarmreciever class
                Intent intentAlarm = new Intent(this, AlarmReciever.class);
    
                // create the object
                AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    
                //set the alarm for particular time
                alarmManager.set(AlarmManager.RTC_WAKEUP,time, PendingIntent.getBroadcast(this,1,  intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));
                Toast.makeText(this, "Alarm Scheduled for Tommrrow", Toast.LENGTH_LONG).show();
    
        }
    }
    

    AlarmReciever.java

    public class AlarmReciever extends BroadcastReceiver
    
    {
             @Override
                public void onReceive(Context context, Intent intent)
                {
                   //call the method here
    
                 }
    
    }