Я хочу регистрировать местоположение пользователя каждые три секунды, я хочу видеть местоположение, когда приложение будет убито, а также если пользователь перезапустит устройство. Я могу видеть местоположение пользователя, когда приложение работает или работает в фоновом режиме

Моя служба:
public class GPS_Service extends Service {
private LocationListener listener;
private LocationManager locationManager;
String bat;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context ctxt, Intent intent) {
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
bat=String.valueOf(level) + "%";
}
};
@SuppressLint("MissingPermission")
@Override
public void onCreate() {
super.onCreate();
Log.wtf("TAG", "Service created.");
}
@SuppressLint("MissingPermission")
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.wtf("TAG", "Service started.");
this.registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
listener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
Intent i = new Intent("location_update");
i.putExtra("coordinates",location.getLongitude()+" "+location.getLatitude()+ " " + bat);
sendBroadcast(i);
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}
};
locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
//noinspection MissingPermission
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,3000,0,listener);
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
if (locationManager != null){
//noinspection MissingPermission
locationManager.removeUpdates(listener);
}
}
}
Manifest.xml
<manifest xmlns:android = "http://schemas.android.com/apk/res/android"
package = "com.example.syyam.driverlocation">
<uses-permission android:name = "android.permission.INTERNET"></uses-permission>
<uses-permission android:name = "android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name = "android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name = "android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup = "true"
android:icon = "@mipmap/ic_launcher"
android:label = "@string/app_name"
android:roundIcon = "@mipmap/ic_launcher_round"
android:supportsRtl = "true"
android:theme = "@style/AppTheme">
<activity android:name = ".MainActivity">
<intent-filter>
<action android:name = "android.intent.action.MAIN" />
<category android:name = "android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:enabled = "true" android:name = ".GPS_Service"/>
<receiver
android:name = ".StartMyServiceAtBootReceiver"
android:label = "StartMyServiceAtBootReceiver">
<intent-filter>
<action android:name = "android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
</manifest>
Мой BroadcastReceiver:
public class StartMyServiceAtBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
Intent serviceIntent = new Intent(context, GPS_Service.class);
context.startService(serviceIntent);
}
}}
Теперь, когда я перезагружаю свое устройство, я вижу только зарегистрированные сообщения в моей службе onCreate и onStartMethods, но я не могу видеть их местоположения. Мой log cat после перезагрузки выглядит следующим образом:

Обновлено: ОСНОВНАЯ ДЕЯТЕЛЬНОСТЬ
public class MainActivity extends AppCompatActivity {
private Button btn_start, btn_stop;
private TextView textView;
private BroadcastReceiver broadcastReceiver;
@Override
protected void onResume() {
super.onResume();
if (broadcastReceiver == null){
broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
textView.setText("\n" +intent.getExtras().get("coordinates"));
Log.wtf("hae"," "+intent.getExtras().get("coordinates"));
}
};
}
registerReceiver(broadcastReceiver,new IntentFilter("location_update"));
}
@Override
protected void onDestroy() {
super.onDestroy();
if (broadcastReceiver != null){
unregisterReceiver(broadcastReceiver);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textView);
if (!runtime_permissions())
enable_buttons();
}
private void enable_buttons() {
Intent i =new Intent(getApplicationContext(),GPS_Service.class);
startService(i);
}
private boolean runtime_permissions() {
if (Build.VERSION.SDK_INT >= 23 && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED){
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},100);
return true;
}
return false;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 100){
if ( grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED){
enable_buttons();
}else {
runtime_permissions();
}
}
}}
У меня есть метод onResume () в моей mainActivity, который его получает. Я добавил свою mainActivity в Edit
Хорошо, но при загрузке ваш MainActivity не работает и, следовательно, не имеет зарегистрированного приемника для получения этой трансляции.
Да, это именно то, о чем я думаю. Но есть ли способ запустить mainActivity?
Ну, технически да. Вы можете startActivity() из загрузочного приемника, как будто вы startService(), но действительно ли вы хотите, чтобы ваше приложение появлялось при загрузке каждый раз? Вы не могли войти в Service?
Да собираюсь это сделать.
Куда идет трансляция
Intent("location_update")? То есть какой компонент у вас есть при регистрации для его получения? Если этот компонент не запущен и не зарегистрирован, он не получит эту трансляцию.