This is a migrated thread and some comments may be shown as answers.

Kendo UI + Cordova Background Agent for Android,iOS & Windows phone

7 Answers 370 Views
HTML5, CSS, JavaScript
This is a migrated thread and some comments may be shown as answers.
This question is locked. New answers and comments are not allowed.
Andreas Mildenberger
Top achievements
Rank 1
Andreas Mildenberger asked on 15 Jul 2014, 11:45 AM
How do we get Background agent to track location of device as same works in Windows Phone 8 native.

The same thing i need develop in Android and iOS so i need to know that how we can do that using HTML5\JS with Kendo UI (Appbuilder, cordova).

Please assist me for the same.

Thanks



7 Answers, 1 is accepted

Sort by
0
Kaloyan
Telerik team
answered on 18 Jul 2014, 08:04 AM
Hello Andreas,

For this you will need to use custom Cordova plugin. Unfortunately, I was not able to find such for the WP Background Agent. However, there are a lot others that could help you out.

For example this one. It integrates with all the three supported mobile platforms (iOS, Android and WP) and it seems like a good choice. You can also check this forum post for more details.

Another one is the Background Geolocation, which does exactly what you need. It tracks the location of your device, while in background mode. However, its current state supports only Android and iOS devices. Here is a good forum posts about it.

Further, to import third party Cordova plugin within your application, you can follow these steps.

I hope this helps.

Regards,
Kaloyan
Telerik
 

Share what you think about AppBuilder and Telerik Platform with us in our feedback portal, so we can become even better!

 
0
Andreas
Top achievements
Rank 1
answered on 08 Aug 2014, 02:54 PM
Hello Kaloyan,

we have follwed the link https://github.com/christocracy/cordova-plugin-background-geolocation and implement the whole solution as it is, but its not working we are continuously getting the error, " Class not found" , also the example it was given <script type="text/javascript" src="phonegap.js"></script> but the phonegap.js is no where in the sample, we have download it from the phonegap site, but still no success. please suggest us any solution if you have.

0
Kaloyan
Telerik team
answered on 13 Aug 2014, 01:45 PM
Hello Andreas,

Thank you for reaching back.

As the plugin is developed mainly for phonegap users, the example in it refers phonegap.js. When used within AppBuilder, you will need to change this to cordova.js. Anyway, I have prepared a ready to go application for your convenience. Please, import it on your side and check if it is working as expected. For iOS the app will print coordinates and other plugin options in the devise console. However, for Android you will first need to provide a server url in order to upload and sync the coordinates. I hope it helps.

Further, here are the things that should be noted while importing the plugin and using the provided in it example:
1. Download the plugin as an archive from here and then import it inside your project.
2. Next, apply the following changes to the index.js file:
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
var app = {
    // Application Constructor
    initialize: function() {
        this.bindEvents();
    },
    // Bind Event Listeners
    //
    // Bind any events that are required on startup. Common events are:
    // 'load', 'deviceready', 'offline', and 'online'.
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    // deviceready Event Handler
    //
    // The scope of 'this' is the event. In order to call the 'receivedEvent'
    // function, we must explicity call 'app.receivedEvent(...);'
    onDeviceReady: function() {
        app.receivedEvent('deviceready');
        navigator.splashscreen.hide();
         
        if (window.plugins.backgroundGeoLocation) {
        app.configureBackgroundGeoLocation();
        }
    },
    // Update DOM on a Received Event
    receivedEvent: function(id) {
        var parentElement = document.getElementById(id);
        var listeningElement = parentElement.querySelector('.listening');
        var receivedElement = parentElement.querySelector('.received');
 
        listeningElement.setAttribute('style', 'display:none;');
        receivedElement.setAttribute('style', 'display:block;');
 
        console.log('Received Event: ' + id);
    },
    configureBackgroundGeoLocation: function() {
        // Your app must execute AT LEAST ONE call for the current position via standard Cordova geolocation,
        // in order to prompt the user for Location permission.
        window.navigator.geolocation.getCurrentPosition(function(location) {
            console.log('Location from Phonegap');
        });
        var bgGeo = window.plugins.backgroundGeoLocation;
        /**
         * This would be your own callback for Ajax-requests after POSTing background geolocation to your server.
         */
        var yourAjaxCallback = function(response) {
            ////
            // IMPORTANT: You must execute the #finish method here to inform the native plugin that you're finished,
            // and the background-task may be completed. You must do this regardless if your HTTP request is successful or not.
            // IF YOU DON'T, ios will CRASH YOUR APP for spending too much time in the background.
            //
            //
            bgGeo.finish();
        };
        /**
         * This callback will be executed every time a geolocation is recorded in the background.
         */
        var callbackFn = function(location) {
            console.log('[js] BackgroundGeoLocation callback: ' + location.latitude + ',' + location.longitude);
            // Do your HTTP request here to POST location to your server.
            //
            //
            yourAjaxCallback.call(this);
        };
        var failureFn = function(error) {
            console.log('BackgroundGeoLocation error');
        }
        // BackgroundGeoLocation is highly configurable.
        bgGeo.configure(callbackFn, failureFn, {
                            url: 'http://only.for.android.com/update_location.json', // <-- only required for Android; ios allows javascript callbacks for your http
                            params: { // HTTP POST params sent to your server when persisting locations.
                auth_token: 'user_secret_auth_token',
                foo: 'bar'
            },
                            headers: {
                'X-Foo': 'bar'
            },
                            desiredAccuracy: 10,
                            stationaryRadius: 20,
                            distanceFilter: 30,
                            notificationTitle: 'Background tracking', // <-- android only, customize the title of the notification
                            notificationText: 'ENABLED', // <-- android only, customize the text of the notification
                            activityType: "AutomotiveNavigation", // <-- iOS-only
                            debug: true // <-- enable this hear sounds for background-geolocation life-cycle.
                        });
        // Turn ON the background-geolocation system. The user will be tracked whenever they suspend the app.
        bgGeo.start();
        // If you wish to turn OFF background-tracking, call the #stop method.
        // bgGeo.stop()
    }
};
Note, you will need to provide a server url in order to run the plugin on Android devices. I have marked the spot in the index.js file with red.

3. Keep the index.html file as it is, created from a blank project template.
4. Build and deploy the application and check if it is working as expected while in the background.

Also, for server implementation you can use Telerik Backend Services which allow you to store GeoPoint values  in the data items in your content types and make queries on top of these values. For example, you can send push notifications to the users that are currently located in a certain range or polygon.

Please, do not hesitate to contact us again if you need further assistance.

Regards,
Kaloyan
Telerik
 

Visit the Telerik Verified Plugins Marketplace and get the custom Cordova plugin you need, already tweaked to work seamlessly with AppBuilder.

 
0
Christopher
Top achievements
Rank 1
answered on 23 Mar 2015, 04:13 PM
Hi, plugin author of cordova-background-geolocation.

I've released a new Premium Version with completely refactored Android plugin.

- Vastly improved Android battery performance.
- Android no longer handles HTTP in-plugin -- executes your javascript callback, just like iOS

http://christocracy.github.io/cordova-background-geolocation/
0
Kaloyan
Telerik team
answered on 26 Mar 2015, 11:18 AM
Hi Christopher,

Thank you for bringing this to the community!

Regards,
Kaloyan
Telerik
 

Visit the Telerik Verified Plugins Marketplace and get the custom Cordova plugin you need, already tweaked to work seamlessly with AppBuilder.

 
0
Anushri
Top achievements
Rank 1
answered on 15 Sep 2015, 04:09 PM

I am truing to imports cordova background service plugins. after import i can show the folder under plugins folder but not find in properties->plugins

 I got plugins from Red-Folder/Cordova-Plugin-BackgroundService

Can you please help me?

0
Kaloyan
Telerik team
answered on 18 Sep 2015, 10:24 AM
Hi Anushri,

I assume you are speaking of the BackgroundService plugin found here? Please, correct me if my assumption is wrong. However, if so, these versions of the plugin are not Plugman compatible and thus, not seeing them in your project's Properties page is expected.

As written in the above mentioned git repository, you will need to install this version of the BackgroundServices plugin in your AppBuilder project instead. A demo about it can be found here.

I hope this helps.

Regards,
Kaloyan
Telerik
 

Visit the Telerik Verified Plugins Marketplace and get the custom Cordova plugin you need, already tweaked to work seamlessly with AppBuilder.

 
Tags
HTML5, CSS, JavaScript
Asked by
Andreas Mildenberger
Top achievements
Rank 1
Answers by
Kaloyan
Telerik team
Andreas
Top achievements
Rank 1
Christopher
Top achievements
Rank 1
Anushri
Top achievements
Rank 1
Share this question
or