当前位置: 首页 > 知识库问答 >
问题:

Android BLE扫描前台服务

陆俭
2023-03-14

我可以在Android 10上使用前台服务在后台进行工作BLE扫描。我的应用程序具有in-manifest Foreground\u服务,并在启动时从用户那里获得premissions ACCESS\u FINE\u位置和ACCESS\u background\u位置。然后用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);

但是它也不起作用。为什么当屏幕关闭时前台服务会停止?

共有1个答案

尹弘壮
2023-03-14

请检查位置权限。由于Android 10,无法获得位置权限的“允许所有时间”选项。

因此,您需要说服用户进行设置。

如果要在后台使用BLE,则必须将位置权限设置为“始终允许”。

 类似资料:
  • 我想在我的Android应用程序中被动地扫描BLE广告商, 但我找不到如何做到这一点。 > < li> 根据蓝牙4.0核心规范,存在被动扫描模式。< br >第6卷:核心系统包[低能耗控制器卷],< br > D部分:4.1被动扫描< br > https://www.bluetooth.org/DocMan/handlers/DownloadDoc.ashx?doc_id=282159 “设备可

  • 我正在Android(移动设备a)上执行UUID过滤扫描,我有两个测试用例。 一个人在另一个Android设备(移动设备b)上使用一个名为BLE扫描仪的应用程序来创建一个具有两个测试服务的BLE服务器(每个服务都有自己唯一的UUID)。另一种是通过Arduino BLE服务器,为其服务定制UUID。 如果我使用移动设备B的BLE扫描仪应用程序并扫描arduino,我可以找到它,连接到它并查看服务以

  • 我必须构建一个Android应用程序,用于读取一种设备上的信息,该设备仅在过滤时在扫描时显示(一般扫描不会显示它)。该设备类似于信标,因此它仅通告数据,这些数据在通告上具有我想要的信息(它不可连接)。制造商给我的过滤器是原始数据。即: 0x02010612435542 我不能按名称过滤它,因为设备不会宣传它的名称。我也不能通过来完成,因为应用程序以前不会知道设备的地址(这将是许多此类设备)。 nr

  • 我使用启动服务(也尝试过)并使用立即将其移动到前台,然后在服务中我创建一个线程,在那里我开始BLE扫描15分钟,之后我停止BLE扫描,然后立即重新启动BLE扫描15分钟,依此类推。 当我运行应用程序时,请求并批准活动的权限。然后我用设备按钮锁定屏幕,让前台服务运行,扫描BLE并从BLE设备读取数据。 如果我在Android 7上运行它,这是没有问题的。但是当我在Android 8上运行它时,我得到

  • 我想从标准输入中读取一个双数,但是我总是得到这个异常: Java . util . inputmismatchexception 如果输入是整数,那没问题,但是如果是双精度的,我会得到异常。 线程“main”Java . util . inputmismatchexception Java . util . scanner . throw for(scanner . Java:864)Java .

  • 我试图创建一个应用程序扫描信标。前台应用程序工作得很好。然而,当我试图在应用程序中包含后台扫描时,它会导致应用程序崩溃。基本上,一旦应用程序启动,应用程序要求权限,关闭,后台扫描通知就会出现。所以,每次后台服务检测到一个信标,它就关闭应用程序。 我想做的是,当应用程序进入前台时,以某种方式停止后台扫描。我试着用 这是主要活动: 以下是日志: