4

현재 앱 (작업)이 포어 그라운드에있을 때만 데이터를 서버로 보낼 수 있습니다. 안드로이드 SO가 앱을 일시 중지하거나 중지하기 때문에 적어도 4.1.3에서 발생합니다.앱이 백그라운드로 들어 오면 안드로이드 장치에서 서버로 데이터를 보냅니다.

활동이 백그라운드에 있어도 항상 데이터를 보내야합니다.

가장 좋은 방법은 무엇입니까? Asynctask는 데이터를 주기적으로 보내기 때문에 좋은 대답이 아닙니다. 한 번도. 이미 서버에 데이터를 보내는 방법으로 asynctasks를 사용합니다. 필요한 것은 활동과 함께 실행되지만 SO에 의해 중단되지는 않습니다.

편집 :

아래 코드를 사용하여이 오류가 발생했습니다.

04-03 13:55:28.804: E/AndroidRuntime(1165): java.lang.RuntimeException: Unable to instantiate receiver main.inSituApp.BootCompletedIntentReceiver: java.lang.ClassNotFoundException: main.inSituApp.BootCompletedIntentReceiver 

아무도 그 오류의 의미를 말해 줄 수 있습니까? 그 수신기를 가진 수업은 없지만, 비록 내가 그것을 매니 페스트에 등록하면 나는 그것을 필요로하지 않을 것입니다.

+1

사용 서비스 : HT tp : //developer.android.com/guide/components/services.html –

+1

인 텐트 서비스 또는 서비스 사용 ... http://developer.android.com/reference/android/app/IntentService.html http : // developer .android.com/reference/android/app/Service.html –

답변

4

이렇게하려면 servicesAlarmManager을 쓸 수 있습니다. 간단히 서비스에서 응용 프로그램을 등록하고 서비스의 onStart() 방법으로 수행 할 서버 측이나 다른 작업의 코드를 시작 alarmMangaer.setRepeat() 메소드를 호출

public class MyService extends Service{ 
    Calendar cur_cal = Calendar.getInstance(); 
    @Override 
public void onCreate() { 
    // TODO Auto-generated method stub 
    super.onCreate(); 
    Intent intent = new Intent(this, MyService.class); 
    PendingIntent pintent = PendingIntent.getService(getApplicationContext(), 
      0, intent, 0); 
    AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
      cur_cal.setTimeInMillis(System.currentTimeMillis()); 
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, cur_cal.getTimeInMillis(), 
      60 * 1000*3, pintent); 
} 
@Override 
public void onStart(Intent intent, int startId) { 
    // TODO Auto-generated method stub 
    super.onStart(intent, startId); 
      // your code for background process 
    } 
} 

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<service 
     android:name="com.yourpackage.MyService" 
     android:enabled="true" /> 
    <receiver android:name=".BootCompletedIntentReceiver" > 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
    </receiver> 

의 AndroidManifest.xml이 추가 편집 : BootCompletedIntentReceiver.java

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 

public class BootCompletedIntentReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) { 
      Intent pushIntent = new Intent(context, MyService.class); 
      context.startService(pushIntent); 
     } 
    } 
} 
+0

알람 관리자가 60 * 100 * 3 밀리 초마다 서비스를 실행한다는 것이 정확히 이해되면 어떻게됩니까? – JoaoFilipeClementeMartins

+0

예, 3 분마다 신청서를 부릅니다. –

+0

Btw, 캘린더 가져 오기는 무엇입니까? – JoaoFilipeClementeMartins

관련 문제