我无法在Android 10上使用前台服务在后台进行BLE扫描。我的应用程序在清单中具有FOREGROUND_SERVICE,并在启动时从用户获得权限ACCESS_FINE_LOCATION和ACCESS_BACKGROUND_LOCATION。然后,它使用BLE扫描启动前台服务。当屏幕打开服务时,进行扫描并查找设备,但当屏幕关闭时,前台服务停止工作,扫描停止。
正在启动服务:
Intent serviceIntent = new Intent(context, BTService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(serviceIntent);
} else {
context.startService(serviceIntent);
}
使其成为前景:
startForeground(BT_SERVICE_ID, notification);
我尝试从服务中发出通知:
final Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
.setContentTitle(getString(R.string.service))
.setContentText((new Date()).toString())
.setSmallIcon(R.drawable.ic_service)
.build();
notificationManager.notify(BT_SERVICE_ID, notification);
handler.postDelayed(runnable, delay);
}
};
int delay = 30000;
并每隔30秒从前台服务发送一次:
handler.postDelayed(runnable, delay);
但它也不工作。为什么前台服务停止时,屏幕关闭?
2条答案
按热度按时间axkjgtzd1#
请检查位置权限。自Android 10以来,无法获得位置权限的“始终允许”选项。
因此,您需要说服用户设置它。
如果想在后台使用BLE,必须将位置权限设置为“Allow all the time”。
vlju58qv2#
**答:**根据Adnroid文档,如果您不使用scan filters(即扫描所有可用设备),扫描将在屏幕关闭时停止以保存电源。扫描将在屏幕再次打开时恢复。
**我的案例:**我使用React Native开发Android 10应用。在前台服务中扫描应用程序不活动时,即使屏幕保持打开,扫描也会在几分钟内停止。如果关闭屏幕,扫描会立即停止。