-1
배경 서비스에서 google fit API를 호출하려고하는데 최근 앱을 정리하면 서비스가 중지됩니다. 어쩌면 알람을 사용하면 서비스를 멈추지 않는 가장 좋은 방법이지만 오류가 로그에 남지 않고 충돌 할 수 있습니다. 이 작업을 수행하는 가장 좋은 방법입니까? 그렇지 않은 경우 가장 좋은 방법은 무엇입니까? 서비스에서 확장 무엇google에 맞는 api 백그라운드 서비스 호출
클래스 :
public class ServiceGFA extends Service {
Alarm alarm = new Alarm();
public void onCreate(){
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId){
alarm.setAlarm(this);
return START_STICKY;
}
@Override
public void onStart(Intent intent, int startId){
alarm.setAlarm(this);
}
@Override
public IBinder onBind(Intent intent){
return null;
}
}
알람 클래스 :
public class Alarm extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
scs.execute();
}
public void setAlarm(Context context){
scs = new stepscountservice();
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, Alarm.class);
PendingIntent pi = PendingIntent.getBroadcast(context,0,i,0);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000*6*1, pi);
Toast.makeText(context, "service started", Toast.LENGTH_SHORT).show();
}
public void cacelAlarm(Context context){
Intent intent = new Intent(context, Alarm.class);
PendingIntent sender = PendingIntent.getBroadcast(context,0,intent,0);
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(sender);
}
private class stepscountservice extends AsyncTask<Object, Object, Long> {
boolean cent;
@Override
protected void onPreExecute() {
super.onPreExecute();
cent = true;
}
@Override
public Long doInBackground(Object... params) {
while (cent) {
long total = 0;
com.google.android.gms.common.api.PendingResult<DailyTotalResult> result = Fitness.HistoryApi.readDailyTotal(mApiClient, DataType.TYPE_STEP_COUNT_DELTA);
DailyTotalResult totalResult = result.await(1, TimeUnit.SECONDS);
if (totalResult.getStatus().isSuccess()) {
DataSet totalSet = totalResult.getTotal();
if (totalSet != null) {
total = totalSet.isEmpty() ? 0 : totalSet.getDataPoints().get(0).getValue(Field.FIELD_STEPS).asInt();
pasos = total;
}
}
}
return null;
}
@Override
protected void onProgressUpdate(Object... values) {
super.onProgressUpdate(values);
Toast.makeText(context, "Steps:" + ""+values[0], Toast.LENGTH_SHORT).show();
}
@Override
protected void onCancelled() {
super.onCancelled();
cent = false;
}
}
답변에 대한 탁구, 나는 이것이 정말로 효과가 있는지 모르겠지만, IntentService를 사용하여 문제를 해결할 수 있습니다. 어쨌든 고마워! – zasaz