私は、場所の更新を本当に速くバックグラウンドから取得する必要があるアプリケーションを作成しています。 したがって、私は必要な結果を達成するためのサービスを作成しました。LocationListenerは、Androidサービスでいつか更新を提供しません。
私は、アクティビティのonCreate()メソッドからサービスを開始しています。
私が直面している問題は、サービスが起動されてから約20〜30秒間位置更新を提供できることです。それから私は更新を取得していません。
public class MyLocService extends Service
implements
LocationListener{
private final LocationListener locationListener = this;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Handler handler = new Handler(Looper.getMainLooper());
Runnable runnable = new Runnable() {
@Override
public void run() {
if (checkPermission()) {
manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}
else{
//Request Permission
Intent permissionIntent = new Intent();
permissionIntent.setAction(LOCATION_PERMISSION_REQUIRED);
sendBroadcast(permissionIntent);
}
Looper.loop();
}
};
handler.post(runnable);
//Create notification nad run in foreground
startForeground(
NotificationCreator.getNotificationId(),
NotificationCreator.getNotification(context)
);
return Service.START_STICKY;
}
@Override
public void onLocationChanged(Location location) {
Log.d("LocUpdate", location.getLatitude() + " : " + location.getLongitude());
}
私のような活動からサービスを起動するたび:ここ
は、サービスのためのコードであるIntent intent = new Intent(this, MyLocService.class);
startService(intent);
私は20〜30秒間onLocationChange()にアップデートを取得。
もう1つの観察は、私が(私がサービスを開いて見えている場所から)活動を続けていれば、私は場所の更新を取得し続けます。 しかし、私がアクティビティを終了したり、アプリを終了して、単独でサービスをバックグラウンドで実行できるようにすると、画面の上部に通知が表示されるため、サービスは実行されていますが、場所の更新はありません。
私は間違っていますか?
実行中のアプリリストでサービスが実行されていますか?あなたの携帯電話は、サービスを実行することができますか?いくつかの携帯電話romは、デフォルトのSTART_STICKYがサービスを再開するのを許可しません –
そうです。私はサービスが走っているのを見ることができます。私はレミーミノート4をマシュマロでテストしています。退出は何ですか? – Priyabrata
私はredmi note 3に問題がありました。なぜなら、MIUIはデフォルトではサービスが再開されないため、死んでしまうからです。これを試して、Settings> Permissions> Autostart>に行き、あなたのアプリが自動スタート –