2016-11-04 4 views
1

반복되는 HTTP 요청 (즉, 45 분마다)을 만드는 가장 쉬운 방법은 무엇입니까? 푸시 업 알림을 사용하고 싶지 않습니다. 이미 AlarmManager를 시도했지만 작동하지 않았습니다.Android : 반복 된 HTTP 요청

지상 서비스는 좋은 방법 일 수 있지만 배터리를 너무 많이 소모 할 수 있습니다.

+0

alaram manger를 사용하면 배터리 사용량이 적어 완벽하게 작동합니다. 만약 내가 당신에게 완전한 소스 코드를 제공합니다. –

+0

가능하다면, 예를 들어주세요. –

답변

0

전화 당신의 MainActivity에서이 metod :

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에 대한 서비스를 만드는 :

<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"/> 

이 코드 : 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(); 
    } 
} 

지금 매니페스트 파일이 추가 지정된 시간 간격으로 서비스를 시작하십시오. 희망이 있으면 더 많은 코드가 필요하면 알려주세요.