Java 前台服务在几个小时后停止
我有一个应用程序,使用3个前台服务来扫描和处理BluetoothLeScanner的信标。其中只有一个具有扫描它们的代码,其他两个服务处理扫描的信标并进行一些api调用。 几个小时后,前台服务停止工作,并显示通知 通过ScanResult上的ScanCallback进行扫描。扫描每5分钟重新启动一次,以避免Android停止扫描 我用START\u STICKY运行前台服务。我制作了一个广播接收器,在调用onDestroy()方法时重新启动服务Java 前台服务在几个小时后停止,java,android,google-contacts-api,foreground-service,Java,Android,Google Contacts Api,Foreground Service,我有一个应用程序,使用3个前台服务来扫描和处理BluetoothLeScanner的信标。其中只有一个具有扫描它们的代码,其他两个服务处理扫描的信标并进行一些api调用。 几个小时后,前台服务停止工作,并显示通知 通过ScanResult上的ScanCallback进行扫描。扫描每5分钟重新启动一次,以避免Android停止扫描 我用START\u STICKY运行前台服务。我制作了一个广播接收器,在调用onDestroy()方法时重新启动服务 @Override public voi
@Override
public void onCreate() {
Log.i("EntryDetectionService", "Starting Service");
super.onCreate();
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
String CHANNEL_ID = "Beacon Reader";
String CHANNEL_NAME = "Scanning Beacons";
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);
((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(channel);
Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID)
.setCategory(Notification.CATEGORY_SERVICE).setPriority(PRIORITY_HIGH)
.setSmallIcon(R.drawable.ic_launcher)
.build();
startForeground(101, notification);
}
}
ScanSettings=new ScanSettings.Builder()
.setScanMode(扫描设置.SCAN\u模式\u低延迟)
.build();
列表过滤器=新的ArrayList();
ScanFilter filter=new ScanFilter.Builder()
.setManufacturerData(76,新字节[]{})
.build();
过滤器。添加(过滤器);
if(bluetoothAdapter.isEnabled())
bleScanner.startScan(过滤器、设置、扫描回调);
谢谢 让应用程序保持活动状态
当api>21时,您可以使用
某些设备可能会使应用程序保持活动状态
开始作业时检查服务是否有效
public boolean isServiceRunning(Context context, String serviceName) {
boolean isRunning = false;
ActivityManager am = (ActivityManager) this
.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> lists = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo info : lists) {
System.out.println(info.processName);
if (info.processName.equals(serviceName)) {
isRunning = true;
}
}
return isRunning;
}
public boolean isServiceRunning(上下文上下文,字符串serviceName){
布尔值isRunning=false;
ActivityManager am=(ActivityManager)此
.getSystemService(Context.ACTIVITY\u服务);
List List=am.getRunningAppProcesses();
对于(ActivityManager.RunningAppProcessInfo:列表){
System.out.println(info.processName);
if(info.processName.equals(serviceName)){
isRunning=true;
}
}
返回正在运行;
}
让应用程序保持活动状态
当api>21时,您可以使用
某些设备可能会使应用程序保持活动状态
开始作业时检查服务是否有效
public boolean isServiceRunning(Context context, String serviceName) {
boolean isRunning = false;
ActivityManager am = (ActivityManager) this
.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> lists = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo info : lists) {
System.out.println(info.processName);
if (info.processName.equals(serviceName)) {
isRunning = true;
}
}
return isRunning;
}
public boolean isServiceRunning(上下文上下文,字符串serviceName){
布尔值isRunning=false;
ActivityManager am=(ActivityManager)此
.getSystemService(Context.ACTIVITY\u服务);
List List=am.getRunningAppProcesses();
对于(ActivityManager.RunningAppProcessInfo:列表){
System.out.println(info.processName);
if(info.processName.equals(serviceName)){
isRunning=true;
}
}
返回正在运行;
}
public boolean isServiceRunning(Context context, String serviceName) {
boolean isRunning = false;
ActivityManager am = (ActivityManager) this
.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> lists = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo info : lists) {
System.out.println(info.processName);
if (info.processName.equals(serviceName)) {
isRunning = true;
}
}
return isRunning;
}