Как использовать Broadcastreceiver в моем проекте?

#java #android #location #broadcastreceiver

Вопрос:

Я пытаюсь создать приложение, которое отслеживает перевозчика и показывает его на карте. Сначала я попытался получить местоположение backgroun, и мне это удалось, но в видео, которые я смотрю, никто не объясняет, как отправлять данные из службы в действие. Кто-нибудь может мне в этом помочь? Вот мой Сервис и основная деятельность. Мне нужно измерить широту и долготу в режиме основной активности.

 --My MainActivity--  import androidx.activity.result.ActivityResultCallback; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.localbroadcastmanager.content.LocalBroadcastManager;  import android.Manifest; import android.app.ActivityManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; import android.net.ConnectivityManager; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.widget.Toast;  import com.example.kuryetakipuygulamasi.databinding.ActivityMainBinding; import com.google.android.material.snackbar.Snackbar;  public class MainActivity extends AppCompatActivity {  ActivityResultLauncherlt;Stringgt; permissionLauncher;  ActivityMainBinding binding;  static MainActivity instance;  public static MainActivity getInstance(){  return instance;  }   @Override  protected void onCreate(Bundle savedInstanceState) {  binding = ActivityMainBinding.inflate(getLayoutInflater());  View view = binding.getRoot();  super.onCreate(savedInstanceState);  setContentView(view);  instance=this;  registerLauncher();  startLocationService();     if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){   if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)) {    Snackbar.make(view,"CAMERAYA ERİŞİM İZNİ GEREKLİ",Snackbar.LENGTH_INDEFINITE).setAction("İZİN VER", new View.OnClickListener() {  @Override  public void onClick(View view) {  //İZİN İSTE  permissionLauncher.launch(Manifest.permission.ACCESS_FINE_LOCATION);  }  }).show();    }else{  //İZİN İSTE  permissionLauncher.launch(Manifest.permission.ACCESS_FINE_LOCATION);  }  }else{  // İZİN VERİLDİ  if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_BACKGROUND_LOCATION)!= PackageManager.PERMISSION_GRANTED){   if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_BACKGROUND_LOCATION)) {    Snackbar.make(view,"CAMERAYA ERİŞİM İZNİ GEREKLİ",Snackbar.LENGTH_INDEFINITE).setAction("İZİN VER", new View.OnClickListener() {  @Override  public void onClick(View view) {  //İZİN İSTE  permissionLauncher.launch(Manifest.permission.ACCESS_BACKGROUND_LOCATION);  }  }).show();  }else{  //İZİN İSTE  permissionLauncher.launch(Manifest.permission.ACCESS_BACKGROUND_LOCATION);  }  }else{  // İZİN VERİLDİ  startLocationService();  }  }   }  private boolean isLocationServiceRunning(){  ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);  if (activityManager!=null){  for (ActivityManager.RunningServiceInfo service:  activityManager.getRunningServices(Integer.MAX_VALUE)){  if (LocationService.class.getName().equals(service.service.getClassName())){  if (service.foreground){  return true;  }  }  }  return false;  }  return false;  }  private void startLocationService(){   Intent intent = new Intent(getApplicationContext(),LocationService.class);  intent.setAction(Constants.ACTION_START_LOCATION_SERVICE);  startService(intent);  Toast.makeText(MainActivity.this, "Location service started", Toast.LENGTH_SHORT).show();   }  private void stopLocationService(){  Intent intent = new Intent(getApplicationContext(),LocationService.class);  intent.setAction(Constants.ACTION_STOP_LOCATION_SERVICE);  startService(intent);  Toast.makeText(MainActivity.this, "Location service stopped", Toast.LENGTH_SHORT).show();  }  public void registerLauncher(){   permissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestPermission(), new ActivityResultCallbacklt;Booleangt;() {  @Override  public void onActivityResult(Boolean result) {  if (result){  //İZİN VERİLDİ  startLocationService();   }else{  //TOST MESAJI  Toast.makeText(MainActivity.this, "CAMERA ERİŞİM İZNİ GEREKLİ", Toast.LENGTH_SHORT).show();  }  }  });  }   }  

 --MY SERVICE--  import android.Manifest; import android.app.ActivityManager; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Build; import android.os.Handler; import android.os.IBinder; import android.os.Looper;  import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.core.app.ActivityCompat; import androidx.core.app.NotificationCompat; import androidx.localbroadcastmanager.content.LocalBroadcastManager;  import com.google.android.gms.location.LocationCallback; import com.google.android.gms.location.LocationRequest; import com.google.android.gms.location.LocationResult; import com.google.android.gms.location.LocationServices;   public class LocationService extends Service {  double latitude;  double longitude;  private LocationCallback locationCallback = new LocationCallback() {  @Override  public void onLocationResult(@NonNull LocationResult locationResult) {  super.onLocationResult(locationResult);  if (locationResult != null amp;amp; locationResult.getLastLocation() != null) {  latitude = locationResult.getLastLocation().getLatitude();  longitude = locationResult.getLastLocation().getLongitude();   }  }  };   @Nullable  @Override  public IBinder onBind(Intent intent) {  throw new UnsupportedOperationException("NOT YET IMPLEMENTED");  }   @RequiresApi(api = Build.VERSION_CODES.O)  private void startLocationService() {  String channelId = "location_notification_channel";  NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);  Intent resultIntent = new Intent();  PendingIntent pendingIntent = PendingIntent.getActivity(  getApplicationContext(),  0,  resultIntent,  PendingIntent.FLAG_UPDATE_CURRENT   );  NotificationCompat.Builder builder = new NotificationCompat.Builder(  getApplicationContext(),  channelId  );  builder.setSmallIcon(R.mipmap.ic_launcher)  .setContentTitle("LOCATION SERVICE RUNNING")  .setDefaults(NotificationCompat.DEFAULT_ALL)  .setContentText("RUNNING")  .setContentIntent(pendingIntent)  .setAutoCancel(false)  .setPriority(NotificationCompat.PRIORITY_MAX);  if (Build.VERSION.SDK_INT gt;= Build.VERSION_CODES.BASE) {  if (notificationManager != null amp;amp; notificationManager.getNotificationChannel(channelId) == null) {  NotificationChannel notificationChannel = new NotificationChannel(  channelId,  "Location Service",  NotificationManager.IMPORTANCE_HIGH  );  notificationChannel.setDescription("This channel is used by Location Service");  notificationManager.createNotificationChannel(notificationChannel);   }  }   LocationRequest locationRequest = LocationRequest.create()  .setInterval(100)  .setFastestInterval(3000)  .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)  .setMaxWaitTime(100);   if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED amp;amp; ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {  return;  }  LocationServices.getFusedLocationProviderClient(this)  .requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper());  startForeground(Constants.LOCATION_SERVICE_ID,builder.build());  }  private void stopLocationService(){  LocationServices.getFusedLocationProviderClient(this)  .removeLocationUpdates(locationCallback);  stopForeground(true);  stopSelf();  }   @RequiresApi(api = Build.VERSION_CODES.O)  @Override  public int onStartCommand(Intent intent, int flags, int startId) {  if (intent!=null){  String action = intent.getAction();  if (action!=null){  if (action.equals(Constants.ACTION_START_LOCATION_SERVICE)){  startLocationService();  }else if(action.equals(Constants.ACTION_STOP_LOCATION_SERVICE)){  stopLocationService();  }  }  }  return super.onStartCommand(intent, flags, startId);  }  }