[ionic] [cordova] 배터리 아이콘을 CSS로 표시

ionic에서 아래와 같은 배터리 아이콘을 CSS로 표시하는 방법입니다.

네이티브의 api로부터, 단말의 전지의 잔량을 취득해 표시합니다.
배터리 잔량이 30% 이하로 황색, 10% 이하로 빨갛게 됩니다.


1. 플러그인을 캡처할 준비를 합니다.



bower.json
{
        :
  "dependencies": {
    "angular-translate": "~2.7.2",
    "angular-translate-handler-log": "~2.7.2",
    "angular-translate-loader-static-files": "~2.7.2",
    "ngCordova": "~0.1.23-alpha"  /* ここを追加 */
  }
        :
}

package.json
{
        :
  "cordovaPlugins": [
    "cordova-plugin-device",
    "cordova-plugin-console",
    "cordova-plugin-whitelist",
    "cordova-plugin-splashscreen",
    "com.ionic.keyboard",
    "cordova-plugin-battery-status"  /* ここを追加 */
  ],
        :
}

2. 플러그인을 캡처하고 환경을 재구성합니다.


npm installionic state restore

3. cordova 플러그인에서 배터리 상태 얻기



app.js
application.run(function($ionicPlatform, $cordovaBatteryStatus, $rootScope) {
  $ionicPlatform.ready(function() {

  $rootScope.$on('$cordovaBatteryStatus:status', function (event, args) {
    $rootScope.batteryLevel = args.level;       // (0 - 100)
  });

  $rootScope.$on('$cordovaBatteryStatus:critical', function (event, args) {
    $rootScope.batteryLevel = args.level;       // (0 - 100)
  });

  $rootScope.$on('$cordovaBatteryStatus:low', function (event, args) {
    $rootScope.batteryLevel = args.level;       // (0 - 100)
  });
});


4. 지시문 만들기



battery-icon.js
service.directive("batteryIcon", function () {
  return {
    restrict: "E",
    scope: {
      level: '@level'
    },
    template: `
      <style type="text/css">
        .battery-width::before{width: {{level/100}}em;}
      </style>
      <div class="battery-full battery-width" ng-class="{yellow:level>10 && level<=30, red:level<=10}"></div>
    `,
  }
});

hage.css
.battery-full {
    font-size: 16px;
    position: relative;
    margin-top: 0.3em;
    width: 1.6em;
    height: 1.2em;
    background:
        linear-gradient(to bottom, #39a9d6 0%, #39a9d6 100%) 0em 0em / 1.3em 0.1em no-repeat,
        linear-gradient(to bottom, #39a9d6 0%, #39a9d6 100%) 1.3em 0em / 0.1em 0.2em no-repeat,
        linear-gradient(to bottom, #39a9d6 0%, #39a9d6 100%) 1.3em 0.2em / 0.3em 0.1em no-repeat,
        linear-gradient(to bottom, #39a9d6 0%, #39a9d6 100%) 1.5em 0.2em / 0.1em 0.5em no-repeat,
        linear-gradient(to bottom, #39a9d6 0%, #39a9d6 100%) 1.3em 0.7em / 0.32em 0.1em no-repeat,
        linear-gradient(to bottom, #39a9d6 0%, #39a9d6 100%) 1.3em 0.8em / 0.1em 0.2em no-repeat,
        linear-gradient(to bottom, #39a9d6 0%, #39a9d6 100%) 0em 0.9em / 1.3em 0.1em no-repeat,
        linear-gradient(to bottom, #39a9d6 0%, #39a9d6 100%) 0em 0em / 0.1em 0.9em no-repeat
    ;
}
/* 残り */
.battery-full::before {
    content: "";
    position: absolute;
    top: 0.15em;
    left: 0.13em;
    height: 0.65em;
    background-color: #39a9d6;
}
.battery-full.red::before{
    background-color: #f6564a;
}
.battery-full.yellow::before{
    background-color: #f6a646;
}

5. 지시어 사용



hage.html
<battery-icon level="{{batteryLevel}}"></battery-icon>

좋은 웹페이지 즐겨찾기