0

私は、場所の更新を本当に速くバックグラウンドから取得する必要があるアプリケーションを作成しています。 したがって、私は必要な結果を達成するためのサービスを作成しました。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つの観察は、私が(私がサービスを開いて見えている場所から)活動を続けていれば、私は場所の更新を取得し続けます。 しかし、私がアクティビティを終了したり、アプリを終了して、単独でサービスをバックグラウンドで実行できるようにすると、画面の上部に通知が表示されるため、サービスは実行されていますが、場所の更新はありません。

私は間違っていますか?

+0

実行中のアプリリストでサービスが実行されていますか?あなたの携帯電話は、サービスを実行することができますか?いくつかの携帯電話romは、デフォルトのSTART_STICKYがサービスを再開するのを許可しません –

+0

そうです。私はサービスが走っているのを見ることができます。私はレミーミノート4をマ​​シュマロでテストしています。退出は何ですか? – Priyabrata

+0

私はredmi note 3に問題がありました。なぜなら、MIUIはデフォルトではサービスが再開されないため、死んでしまうからです。これを試して、Settings> Permissions> Autostart>に行き、あなたのアプリが自動スタート –

答えて

1

私はこの問題を解決しました。 miuiのバッテリー最適化をオフにするか、アプリを例外として追加します。コードは完全に機能します。

関連する問題