-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;
}
}
Thaksこれが動作する場合、私は本当にしかし、私はIntentServiceを使用して、問題を解決することができ、知りません。とにかくありがとう! – zasaz