2016-11-04 55 views
1

重复HTTP请求最简单的方法是什么(即每45分钟)? 我不想使用任何推送通知 我已经试过AlarmManager,但它没有工作。Android:重复HTTP请求

Forground Service可能是一种好方法,但它可能会消耗太多电量。

+0

使用阿拉姆马槽,它使用更少的电池和完美的工作。如果我想给你完整的源代码。 –

+0

请,如果可以的话,给我一个例子,为它! –

回答

0

调用此梅托德从您的MainActivity:

private void setNotifyAlarm() { 
     long _alarm; 
     Calendar now = Calendar.getInstance(); 
     Calendar wakeupcall = Calendar.getInstance(); 
     wakeupcall.setTimeInMillis(System.currentTimeMillis()); 
     wakeupcall.set(Calendar.HOUR_OF_DAY, 15); 
     wakeupcall.set(Calendar.MINUTE, 30); 

     if (wakeupcall.getTimeInMillis() <= now.getTimeInMillis()) 
      _alarm=wakeupcall.getTimeInMillis() + (AlarmManager.INTERVAL_DAY+1); 
     else 
      _alarm=wakeupcall.getTimeInMillis(); 


     al = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
     notif= new Intent(this,NotifyService.class); 
     fintent = PendingIntent.getService(this,0,notif,0); 
     al.setRepeating(AlarmManager.RTC_WAKEUP,_alarm,"45 minutes in Miliseconds", fintent); 

创建服务的HTTP requuest:NotifyService.java

public class NotifyService extends Service { 


    private NotificationManager mNotificationManager; 
    PowerManager powerManager; 
    PowerManager.WakeLock wakeLock; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     powerManager = (PowerManager) getSystemService(POWER_SERVICE); 
     wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "NOTIFY"); 

    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    private void handleSERVICE(Intent intent){ 
     new NotifyTASK().execute(); 
    } 

    private class NotifyTASK extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected Void doInBackground(Void... voids) { 
      { 
      DO your HTTP CALLS 

      } 
      stopSelf(); 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void aVoid) { 
      super.onPostExecute(aVoid); 
     } 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     wakeLock.acquire(); 
     handleSERVICE(intent); 
     return START_STICKY; 
    } 

    @Override 
    public void onDestroy() { 
     wakeLock.release(); 
    } 
} 

现在加入这个清单文件:

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

<service android:name=".NotifyService" android:exported="true" android:enabled="true"/> 

此代码以指定的时间间隔开始服务。 希望这对你有所帮助,如果你需要更多的代码然后告诉我。