Android前台服务在几天后停止请求位置更新。
创始人
2024-10-09 15:02:12
0

出现这种情况可能是由于Android系统的Doze模式或应用程序被优化导致的。为了解决这个问题,我们可以使用AlarmManager在一定的时间间隔内重新启动服务,并在服务中请求位置更新。

以下是一个示例代码,其中“FOREGROUND_SERVICE_ID”是前台服务的ID,而“LOCATION_REQUEST_INTERVAL”是请求位置更新的时间间隔。

public class LocationService extends Service implements LocationListener {
 
    private static final long LOCATION_REQUEST_INTERVAL = 10000; // 10 seconds
 
    private LocationManager locationManager;
 
    private PendingIntent locationUpdateIntent;
 
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
 
    @Override
    public void onCreate() {
        super.onCreate();
 
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    }
 
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel(
                    "default",
                    "Location Service",
                    NotificationManager.IMPORTANCE_LOW
            );
 
            NotificationManager notificationManager = getSystemService(NotificationManager.class);
            notificationManager.createNotificationChannel(channel);
 
            Notification notification = new NotificationCompat.Builder(this, "default")
                    .setContentTitle("Location Service")
                    .setContentText("Location service is running")
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .build();
 
            startForeground(FOREGROUND_SERVICE_ID, notification);
        }
 
        requestLocationUpdates();
 
        return START_STICKY;
    }
 
    @Override
    public void onDestroy() {
        super.onDestroy();
 
        locationManager.removeUpdates(this);
    }
 
    private void requestLocationUpdates() {
 
        Intent intent = new Intent(this, LocationService.class);
        locationUpdateIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
 
        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + LOCATION_REQUEST_INTERVAL, locationUpdateIntent);
        } else {
            alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + LOCATION_REQUEST_INTERVAL, locationUpdateIntent);
        }
 
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
 
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, LOCATION_REQUEST_INTERVAL, 0, this);
 
    }
 
    @Override

相关内容

热门资讯

七次性辅助!大唐麻将辅助软件“... 七次性辅助!大唐麻将辅助软件“揭幕开挂辅助脚本”1、让任何用户在无需大唐麻将辅助软件AI插件第三方神...
3次性黑科技!福建兄弟13水修... 3次性黑科技!福建兄弟13水修改器“分享开挂辅助器”1、下载好福建兄弟13水修改器辅助软件之后点击打...
六次性领会!樱花之盛正版辅助器... 六次性领会!樱花之盛正版辅助器免费“揭露开挂辅助攻略”1、让任何用户在无需樱花之盛正版辅助器免费AI...
第四次性掌握!四川游戏家园破解... 第四次性掌握!四川游戏家园破解版“总结开挂辅助器”进入游戏-大厅左侧-新手福利-激活码辅助透视技能教...
第6次性理解!agpoker辅... 第6次性理解!agpoker辅助“普及开挂辅助挂”1、agpoker辅助系统规律教程、agpoker...
第四次性透视!欢聚水鱼神器“普... 第四次性透视!欢聚水鱼神器“普及开挂辅助神器”1、起透看视 欢聚水鱼神器透明视辅助2、随意选牌 欢聚...
第二次性体悟!海螺众娱脚本“揭... 第二次性体悟!海螺众娱脚本“揭幕开挂辅助教程”1、让任何用户在无需海螺众娱脚本AI插件第三方神器的情...
第一次性透视!微信途游辅助“详... 第一次性透视!微信途游辅助“详细开挂辅助脚本”进入游戏-大厅左侧-新手福利-激活码辅助透视技能教程在...
4次性俱乐部!点点游戏辅助“解... 4次性俱乐部!点点游戏辅助“解迷开挂辅助技巧”1、4次性俱乐部!点点游戏辅助“解迷开挂辅助技巧”;代...
第六次性熟悉!德州透视脚本“总... 第六次性熟悉!德州透视脚本“总结开挂辅助挂”;1、进入游戏-大厅左侧-新手福利-激活码辅助透视技能教...