使用altbeacon停止和重新启动前台服务扫描

时间:2019-04-26 12:10:31

标签: android android-notifications altbeacon

在尝试停止并重新启动altbeacon中的前台扫描时,我目前对粘性通知感到头痛。

我要做什么: 用户在我的应用程序中按下按钮后,我想开始在车辆中扫描Bluetooth LE信标。应用程序应注意用户是否离开了车辆(事件区域左侧)并执行了一些操作。之后,用户可以返回登录屏幕并再次开始该过程。 当应用程序最小化时,信标检测仍将正常工作。

我当前的解决方案: 我在Application类中实现了Altbeacon。在Applications onCreate中,我初始化BeaconManager(getInstance,设置BeaconParsers等)。 当用户单击按钮时,我致电startMonitoring开始前台扫描:

public void startMonitoring() {
    Notification.Builder builder = new Notification.Builder(this);
    builder.setSmallIcon(R.drawable.notificationicon);
    builder.setContentTitle("Content Title");
    builder.setContentText("Content Text");

    Intent intent = new Intent(this, MainActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(
        this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT
    );
    builder.setContentIntent(pendingIntent);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel channel = new NotificationChannel("ChannelId", "ChannelName", NotificationManager.IMPORTANCE_LOW);
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        Objects.requireNonNull(notificationManager).createNotificationChannel(channel);
        builder.setChannelId(channel.getId());
    }

    beaconManager.enableForegroundServiceScanning(builder.build(), 12345);
    beaconManager.setEnableScheduledScanJobs(false);
    beaconManager.setBackgroundBetweenScanPeriod(0);
    beaconManager.setBackgroundScanPeriod(1100);

    beaconManager.bind(this);
}

当我检测到用户离开车辆时,我致电stopMonitoring停止前台扫描并删除通知:

public void stopMonitoring() {
    beaconManager.unbind(this);
    beaconManager.disableForegroundServiceScanning();
}

禁用前景扫描通常应删除粘性通知,或者至少使其(通过滑动)可移动给用户。事实并非如此。 我可以通过删除通知渠道来删除通知:

public void stopMonitoring() {
    [...]

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.deleteNotificationChannel("ChannelId");
    }
}

但是当我这样做时,该应用将不会再次显示通知。

有人知道如何正确停止和重新启动前台扫描吗?

0 个答案:

没有答案