Background Services

A plugin (and framework code) that allows the development and operation of an Android Background Service.
phpsa3.322
platforms: android
$ cordova plugin add com.red_folder.phonegap.plugin.backgroundservice

cbsp

Cordova Background Services Plugin based on https://github.com/Red-Folder/Cordova-Plugin-BackgroundService, A plugin (and framework code) that allows the development and operation of an Android Background Service.

The example MyService Background Service will write a Hello message to the LogCat every minute. The MyService is designed as sample code.

Once installed you will need to edit the com.red_folder.phonegap.plugin.backgroundservice.MyService.java file to make changes.

If you find the Background Service Plugin useful then spread the love. https://github.com/Red-Folder/Cordova-Plugin-BackgroundService#spread-the-love

See

Change in the example index.html the following line

var myService = cordova.require('cordova/plugin/myService');

to

var myService = cordova.require('com.red_folder.phonegap.plugin.backgroundservice.BackgroundService');

Example::

<!DOCTYPE HTML>
<!--
/*
 * Copyright 2013 Red Folder Consultancy Ltd
 *   
 * Licensed 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       
 * 
 *  http://www.apache.org/licenses/LICENSE-2.0   
 *
 * 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.
 */
-->
<html>
    <head>
        <title>MyService V3.1.0</title>

        <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
        <script type="text/javascript" charset="utf-8" src="backgroundService-3.1.0.js"></script>
        <script type="text/javascript">
            /*
             * Copyright 2013 Red Folder Consultancy Ltd
             *   
             * Licensed 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       
             * 
             *  http://www.apache.org/licenses/LICENSE-2.0   
             *
             * 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.
             */




        </script>

        <script type="text/javascript" >

            var myService = cordova.require('com.red_folder.phonegap.plugin.backgroundservice.BackgroundService');



            document.addEventListener('deviceready', function() {
                getStatus();
            }, true);

            function handleSuccess(data) {
                updateView(data);
            }

            function handleError(data) {
                alert("Error: " + data.ErrorMessage);
                alert(JSON.stringify(data));
                updateView(data);
            }

            /*
             * Button Handlers
             */
            function getStatus() {
                myService.getStatus(function(r) {
                    handleSuccess(r)
                },
                        function(e) {
                            handleError(e)
                        });
            }
            ;

            function startService() {
                myService.startService(function(r) {
                    handleSuccess(r)
                },
                        function(e) {
                            handleError(e)
                        });
            }

            function stopService() {
                myService.stopService(function(r) {
                    handleSuccess(r)
                },
                        function(e) {
                            handleError(e)
                        });
            }

            function enableTimer() {
                myService.enableTimer(60000,
                        function(r) {
                            handleSuccess(r)
                        },
                        function(e) {
                            handleError(e)
                        });
            }

            function disableTimer() {
                myService.disableTimer(function(r) {
                    handleSuccess(r)
                },
                        function(e) {
                            handleError(e)
                        });
            }
            ;

            function registerForBootStart() {
                myService.registerForBootStart(function(r) {
                    handleSuccess(r)
                },
                        function(e) {
                            handleError(e)
                        });
            }

            function deregisterForBootStart() {
                myService.deregisterForBootStart(function(r) {
                    handleSuccess(r)
                },
                        function(e) {
                            handleError(e)
                        });
            }

            function registerForUpdates() {
                myService.registerForUpdates(function(r) {
                    handleSuccess(r)
                },
                        function(e) {
                            handleError(e)
                        });
            }

            function deregisterForUpdates() {
                myService.deregisterForUpdates(function(r) {
                    handleSuccess(r)
                },
                        function(e) {
                            handleError(e)
                        });
            }

            function setConfig() {
                var helloToTxt = document.getElementById("helloToTxt");
                var helloToString = helloToTxt.value;
                var config = {
                    "HelloTo": helloToString
                };
                myService.setConfiguration(config,
                        function(r) {
                            handleSuccess(r)
                        },
                        function(e) {
                            handleError(e)
                        });
            }

            /*
             * View logic
             */
            function updateView(data) {

                console.log("UPDATE VIEW CALLED!!!!");

                var serviceBtn = document.getElementById("toggleService");
                var timerBtn = document.getElementById("toggleTimer");
                var bootBtn = document.getElementById("toggleBoot");
                var listenBtn = document.getElementById("toggleListen");
                var updateBtn = document.getElementById("updateBtn");
                var refreshBtn = document.getElementById("refreshBtn");

                var serviceStatus = document.getElementById("serviceStatus");
                var timerStatus = document.getElementById("timerStatus");
                var bootStatus = document.getElementById("bootStatus");
                var listenStatus = document.getElementById("listenStatus");

                serviceBtn.disabled = false;
                if (data.ServiceRunning) {
                    serviceStatus.innerHTML = "Running";
                    serviceBtn.onclick = stopService;
                    timerBtn.disabled = false;
                    if (data.TimerEnabled) {
                        timerStatus.innerHTML = "Enabled";
                        timerBtn.onclick = disableTimer;
                    } else {
                        timerStatus.innerHTML = "Disabled";
                        timerBtn.onclick = enableTimer;
                    }

                    updateBtn.disabled = false;
                    updateBtn.onclick = setConfig;

                    refreshBtn.disabled = false;
                    refreshBtn.onclick = getStatus;

                } else {
                    serviceStatus.innerHTML = "Not running";
                    serviceBtn.onclick = startService;
                    timerBtn.disabled = true;
                    timerEnabled = false;

                    updateBtn.disabled = true;
                    refreshBtn.disabled = true;
                }

                bootBtn.disabled = false;
                if (data.RegisteredForBootStart) {
                    bootStatus.innerHTML = "Registered";
                    bootBtn.onclick = deregisterForBootStart;
                } else {
                    bootStatus.innerHTML = "Not registered";
                    bootBtn.onclick = registerForBootStart;
                }

                listenBtn.disabled = false;
                if (data.RegisteredForUpdates) {
                    listenStatus.innerHTML = "Registered";
                    listenBtn.onclick = deregisterForUpdates;
                } else {
                    listenStatus.innerHTML = "Not registered";
                    listenBtn.onclick = registerForUpdates;
                }

                if (data.Configuration != null)
                {
                    try {
                        var helloToTxt = document.getElementById("helloToTxt");
                        helloToTxt.value = data.Configuration.HelloTo;
                    } catch (err) {
                    }
                }

                if (data.LatestResult != null)
                {
                    try {
                        var resultMessage = document.getElementById("resultMessage");
                        resultMessage.innerHTML = data.LatestResult.Message;
                    } catch (err) {
                    }
                }
            }

        </script>

    </head>

    <body>
        <h1>MyService V3.1.0</h1>

        <table>
            <tr>
                <th>Service</th>
                <td><div id="serviceStatus"></div></td>
                <td><input disabled id="toggleService" type="button" value="toggle"/></td>
            </tr>
            <tr>
                <th>Timer</th>
                <td><div id="timerStatus"></div></td>
                <td><input disabled id="toggleTimer" type="button" value="toggle"/></td>
            </tr>
            <tr>
                <th>Boot</th>
                <td><div id="bootStatus"></div></td>
                <td><input disabled id="toggleBoot" type="button" value="toggle"/></td>
            </tr>
            <tr>
                <th>Listen</th>
                <td><div id="listenStatus"></div></td>
                <td><input disabled id="toggleListen" type="button" value="toggle"/></td>
            </tr>

            <tr>
                <th colspan=3 align="center">Configuration</th>
            </tr>
            <tr>
                <th align="left">Hello To</th>
                <td colspan=2 align="center"><input id="helloToTxt" type="Text"/></td>
            </tr>
            <tr>
                <td colspan=3 align="center"><input disabled id="updateBtn" type="button" value="Update Config"/></td>
            </tr>

            <tr>
                <th colspan=3 align="center">Latest Result</th>
            </tr>

            <tr>
                <td colspan=3 align="center"><div id="resultMessage"></div></td>
            </tr>

            <tr>
                <td colspan=3 align="center"><input disabled id="refreshBtn" type="button" value="Refresh"/></td>
            </tr>

        </table>

    </body>
</html>

Support: The code is all taken from https://github.com/Red-Folder/Cordova-Plugin-BackgroundService and is theirs, We will offer support where possible however we have simply wrapped the code to allow for it to work within the cordova CLI.