Blank
Blank

Reputation: 7208

Is it possible to detect a battery operated device in javascript?

A client recently asked me to implement a slideshow on our website. I'm concerned that constantly animating picture transitions on the homepage will peg the processor of most mobile devices, so I want to disable the automatic advancing to preserve battery life. Is there any way to do this without trying to detect the user agent?

I've seen that there is a battery status API drafted here, but I don't know how complete it is, or which browsers have implemented it.

Upvotes: 3

Views: 1840

Answers (3)

jmartins
jmartins

Reputation: 991

Now you can, with this API: http://davidwalsh.name/javascript-battery-api

navigator.getBattery().then(function(result) {});

Upvotes: 2

Rycochet
Rycochet

Reputation: 2938

Another old topic, but still relevant - I now check if the device has motion sensors, not many laptops do, but all modern smart phones and tablets do - so laptop users can live with slightly more battery use -

jQuery:

if (window.DeviceOrientationEvent) {
    $(window).one("devicemotion", function(event) {
        if (event.originalEvent.acceleration
                && event.originalEvent.acceleration.x !== null) { // Chrome fakes it on desktop
            isMobile = true;
        }
    });
}

Plain Javascript:

if (window.DeviceOrientationEvent) {
    window.ondevicemotion = function(event) {
        if (event.acceleration
                && event.acceleration.x !== null) { // Chrome fakes it on desktop
            window.ondevicemotion = null;
            isMobile = true;
        }
    };
}

Upvotes: 1

Phil H
Phil H

Reputation: 20151

Actually determining battery would be quite difficult and probably involve various permissions problems.

Try just executing a small piece of code and checking the time it took. Pick a cutoff and if the code executes too slowly, turn off the transitions/animation/autoadvance. This will catch more than just battery devices; anything too slow will get the un-animated version. Degrade gracefully.

Upvotes: 2

Related Questions