Cordova ibeacon; 在应用程序被杀后发送本地通知,但在android上无效

sem*_*gay 14 javascript android cordova ibeacon ionic-framework

我正在我的cordova项目中使用Cordova/Phonegap iBeacon插件和ionicframework.当应用程序被杀死时,我正在尝试使用cordova本地通知插件在android和ios上发送本地通知.

这是我的代码:

document.addEventListener("deviceready", onDeviceReady, false);

    function didDetermineStateForRegion(pluginResult) {
    }

    function didStartMonitoringForRegion (pluginResult) {
    }
    function didExitRegion(pluginResult) {
        $cordovaLocalNotification.add({
        id: 30244234234,
        title: "Good By!",
        text: "Hope to see you again."
            }).then(function () {
            });
    }

    function didEnterRegion (pluginResult) {
        $cordovaLocalNotification.add({
        title: "Welcome",
        text: "Tap to launch app"
            }).then(function () {

            });

    };
    function didRangeBeaconsInRegion (pluginResult) {

    }

    function onDeviceReady() {
        // Now safe to use device APIs
        function createBeacon(uuid,nofiyState) {

            var uuid = uuid; // mandatory
            var identifier = 'estimote'; // mandatory

            // throws an error if the parameters are not valid
            var beaconRegion = new cordova.plugins.locationManager.BeaconRegion(identifier, uuid);
            beaconRegion.notifyEntryStateOnDisplay = true;
            return beaconRegion;
        }
        var delegate = new cordova.plugins.locationManager.Delegate();
        delegate.didDetermineStateForRegion = didDetermineStateForRegion;

        delegate.didStartMonitoringForRegion = didStartMonitoringForRegion;

        delegate.didRangeBeaconsInRegion = didRangeBeaconsInRegion;
        delegate.didEnterRegion = didEnterRegion;
        delegate.didExitRegion = didExitRegion;

        var beaconRegion = createBeacon('02681445-8D1B-4F58-99D4-B25F4B129A58',true);
        // var beaconRegionBlue = createBeacon('02681445-8D1B-4F58-99D4-B25F4B129A58',1,,true);
        cordova.plugins.locationManager.setDelegate(delegate);

        // required in iOS 8+
        //cordova.plugins.locationManager.requestWhenInUseAuthorization();
        cordova.plugins.locationManager.requestAlwaysAuthorization();
        cordova.plugins.locationManager.startMonitoringForRegion(beaconRegion)
        .fail(console.error)
        .done();

    }
Run Code Online (Sandbox Code Playgroud)

cordova插件:

com.unarin.cordova.beacon 3.3.0 "Proximity Beacon Plugin"
de.appplant.cordova.plugin.local-notification 0.8.1 "LocalNotification"
nl.x-services.plugins.socialsharing 4.3.16 "SocialSharing"
org.apache.cordova.console 0.2.13 "Console"
org.apache.cordova.device 0.3.0 "Device"
Run Code Online (Sandbox Code Playgroud)

cordova版本:4.3.0

这适用于ios,即使应用程序被杀死但安卓通知只有在应用程序在后台才会出现.当我从android上的任务管理器中杀死应用程序时我从未见过任何本地通知.

即使app被杀,是否有可能在Android上收到通知?

感谢帮助.

Pro*_*eek 5

让我们清除一些东西,有些状态会让您感到困惑:

  1. 应用即服务
  2. 应用程序在后台运行(即最小化)。
  3. 应用程序被杀死(根本没有运行)

在所有情况下,当您杀死应用程序时(通过长按自定义rom中的后退按钮,或从操作系统中的应用程序菜单强行停止)都处于第三状态,该应用程序只是从内存中删除,没有代码被执行!

在这种情况下,通常要做的是在停止服务后自动重新启动该服务,请检查以下答案,您可以阅读:

强行违反用户意愿运行服务确实是非常糟糕的模式。

有太多的cordova插件可以创建BroadcasteReceiver,但是对您问题的简单回答是:如果应用被杀死,就无法收到通知。

但是您应该考虑一下:如果用户杀死了您的应用程序,则意味着它是有意完成的,因此您不必担心应用程序是否可以正常工作,因为这是用户的问题,而不是开发人员的问题。