前台服务中的Android BLE扫描

hpcdzsge  于 2023-02-27  发布在  Android
关注(0)|答案(2)|浏览(213)

我无法在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);

但它也不工作。为什么前台服务停止时,屏幕关闭?

axkjgtzd

axkjgtzd1#

请检查位置权限。自Android 10以来,无法获得位置权限的“始终允许”选项。
因此,您需要说服用户设置它。
如果想在后台使用BLE,必须将位置权限设置为“Allow all the time”。

vlju58qv

vlju58qv2#

**答:**根据Adnroid文档,如果您不使用scan filters(即扫描所有可用设备),扫描将在屏幕关闭时停止以保存电源。扫描将在屏幕再次打开时恢复。
**我的案例:**我使用React Native开发Android 10应用。在前台服务中扫描应用程序不活动时,即使屏幕保持打开,扫描也会在几分钟内停止。如果关闭屏幕,扫描会立即停止。

相关问题