Я хочу создать приложение для Android, чтобы отслеживать местоположение в реальном времени с помощью сервиса Android.Но когда я убил приложение из недавнего списка приложений, сервис также убил в Android 6 (Huawei y3 2017).Но тот же код работает на Android 8. Пожалуйста, помогите мне решить мою проблему.Ниже приведен мой код.
Я добавил флаги START_STICKY и START_REDELIVER_INTENT в методе onStartCommand.
Я попытался перезапустить службу в методе onTaskRemoved.
Попытался добавить андроид: атрибут процесса
Manifest.xml
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<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>
<activity android:name=".Login" />
<activity android:name=".Home" />
<service
android:name=".TrackingService"
android:enabled="true"
android:exported="true" />
</application>
Вот так запускается моя служба в разделе Домашняя активность
Intent intent = new Intent(Home.this, TrackingService.class);
startService(intent);
Файл службы TrackingService.java
@Override
public void onCreate(){
buildNotification();
requestLocationUpdates();
Toast.makeText(getBaseContext(), "Service Started", Toast.LENGTH_SHORT).show();
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId){
return START_STICKY;
}
private void buildNotification() {
Random random = new Random();
int m = random.nextInt(9999 - 1000) + 1000;
String stop = "stop";
registerReceiver(stopReceiver, new IntentFilter(stop));
PendingIntent broadcastIntent = PendingIntent.getBroadcast(this, 0, new Intent(stop), PendingIntent.FLAG_UPDATE_CURRENT);
Notification.Builder builder = new Notification.Builder(this)
.setContentTitle(getString(R.string.app_name))
.setContentText(getString(R.string.tracking_enabled_notif))
.setOngoing(true)
.setContentIntent(broadcastIntent);
startForeground(m, builder.build());
}
protected BroadcastReceiver stopReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
unregisterReceiver(stopReceiver);
stopSelf();
}
};
private void requestLocationUpdates() {
LocationRequest request = new LocationRequest();
request.setInterval(15000);
request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
FusedLocationProviderClient client = LocationServices.getFusedLocationProviderClient(this);
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
final DatabaseReference ref = FirebaseDatabase.getInstance().getReference("connected/"+user.getUid());
int permission = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
if (permission == PackageManager.PERMISSION_GRANTED) {
client.requestLocationUpdates(request, new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
android.location.Location location =
locationResult.getLastLocation();
String lat = Double.toString(location.getLatitude());
String lng = Double.toString(location.getLongitude());
Toast.makeText(getBaseContext(), "Lat "+lat, Toast.LENGTH_SHORT).show();
if (location != null) {
ref.setValue(locationObj);
}
enter code here}
}, null);
}
}