質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.54%

  • Swift

    8583questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iOS/Swiftで、バッテリー容量(へたり具合)を取得したい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,202

kazy1981

score 34

前提・実現したいこと

iOSアプリでバッテリーのへたり具合を取得したく思います。
バッテリーチャージではなく、バッテリー容量です。

アップルストアのアプリで、類似アプリがあるのでできるはずなのですが、意外にサンプルコードがなかなか見つかりませんでした。

https://i-bitzedge.com/ios-apps/battery-life

http://www.lifehacker.jp/2015/11/151114iphone_coconutbattery.html

試したこと

同じ質問がstackoverflowに英語でありますが、1年前で解決に至っていません。

http://stackoverflow.com/questions/35368334/ios-accessing-battery-current-and-maximum-capacity-mah

よろしくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

アップルストアのアプリで、類似アプリがあるのでできるはずなのです

とても興味深いアプリですね
battery voltageと
temperature(本当にバッテリーの温度でしょうか?)

specではbattery level とstatusしかAPIでは取得できませんね

どうやって電圧と温度を取り出しているのでしょう?

battery充電には必ず充電電流、電圧を監視するデバイスが存在して
モニターしています
そのモニタリングデータは何らかの形で内部で使用されているはずです
別な形で表に出ているとも考えられます

https://github.com/nst/BatteryChart
こちらのアイディアとしては以下の情報をログから取り出すわけですが

[1] UIStatusBarServerThread StatusBarData -> batteryCapacity
[2] -[OSDBattery _getBatteryLevel]
[3] -[UIDevice batteryLevel]
[4] -[OSDBattery _getBatteryCurrentCapacity]
[5] -[OSDBattery _getBatteryMaxCapacity]
[6] -[OSDBattery _getRawBatteryVoltage]
[7] IOKit IOPSGetPowerSourceDescription CurrentCapacity / MaxCapacity

lithium ion batteryのCC-CV充放電カーブから推測しているのではないかと想像します

問題は、AppleのAPI以外を使わずに可能なのかというところです
OSDBatteryは使えないようなので

Androidでは確かこのような事をしている例がありましたが
そもそもAndroidではAPIで情報を結構取得できます

意外にサンプルコードがなかなか見つかりませんでした。

Rejectされない方法でこれを実現するには...

あくまで想像ですがiPhoneの場合は機種がそれほどAndroidに比べればありません
機器からサンプルデータを取ってAPIでとり出せるbatter levelと相関を取っているのかもしれません

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/25 09:05

    ご回答ありがとうございます。
    ここに(https://help.batterylifeapp.com/faq.php)当該アプリのFAQがあり、iOS10では以下の3つは取れなくなったとのことです。。
    Battery cycles
    Battery temperature
    Dis-/Charge current
    何か思い浮かばれることあればコメントいただければと。。

    キャンセル

  • 2017/02/25 10:19

    これらの値が今まで取得できていた訳ですね
    私のiOS10では温度は出ていますが
    https://itunes.apple.com/jp/app/battery-life-check-internal/id1080930585?mt=8&ign-mpt=uo%3D4

    これはどのアプリのFAQでしょうね?

    キャンセル

  • 2017/02/27 18:26

    https://github.com/eldade/UIDeviceListener
    iOS9までは可能だったようですね
    iOS10で解決策を見つけられるかですが

    キャンセル

  • 2017/02/28 06:21

    https://itunes.apple.com/jp/app/battery-care-check-your-battery-life/id1130216129?mt=8

    iOS10ではCycle, charge/dischargeが無くなったようですが、へたり具合はまだ残っているようですね
    UIDeviceListnerを使えばできるようです。Objective-Cですが...

    キャンセル

  • 2017/03/01 07:54

    ご回答ありがとうございます! UIdeviceListnerではヘタリ具合は取得可能なんでしょうか?(ちなみになぜそう思われたのでしょうか?)
    もし可能であるならば、objective-cは使ったことないのですが、swiftから呼び出すように自分でやってみたいとは思っておりますが。。

    キャンセル

  • 2017/03/01 09:09

    私の貼ったリンクを見てください。
    こちらも
    http://stackoverflow.com/questions/18741391/how-to-get-battery-consumption-value-for-an-ios-app-x-mah-min

    多分Swiftはないのかもしれません
    Objective-Cはもう忘れました(忘れたい)

    キャンセル

  • 2017/03/03 14:26

    ありがとうございます!
    objective-cは使ったことないのですがちょっとやってみることにします(でも本当にswiftでは出来ないとするとappleがobjective-cサポートしなくなった瞬間に出来なくなってしまうのでしょうが。。)

    キャンセル

  • 2017/03/03 21:07

    頑張って見てください
    私はこのAPIでここにある
    というところまでは見ていませんので...

    Objective-Cで色々なAPIが非推奨になって行ってますのでねー

    キャンセル

  • 2017/04/19 09:55

    Closeになりましたが、できましたか?これで可能かどうかというのは他の人にも有用なので...

    キャンセル

同じタグがついた質問を見る

  • Swift

    8583questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています