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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

1420閲覧

スマホ使用時間を測定するソースコードが知りたい

kyuri39

総合スコア8

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/05/10 07:48

前提・実現したいこと

スマホ使用時間を測定するアプリをunityで作りたいです。
そのために、スマホ使用時間を測定するソースコードが知りたいのですが、探しても見つかりません。
Time.deltaTimeを使って、時間を計測するころはできたのですが、アプリを起動させ、そのアプリの画面を表示している間でないと計測してくれません。
(ソースコードは下の該当のソースコードを参照してください)

スマホ起動時に、アプリもバックグラウンドで起動させ、スマホ使用時間を測定するにはどうしたらよいのでしょうか?

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class timecount : MonoBehaviour { 7 8 float time;//時間を記録する小数も入る変数. 9 Text text; 10 11 void Start () { 12 time = 0; 13 text = GetComponent<Text>();//自分のインスペクター内からTextコンポーネントを取得. 14 } 15 16 void Update () { 17 time += Time.deltaTime;//毎フレームの時間を加算. 18 int day = (int)time/86400;//日.timeを86400で割った値. 19 int hour = (int)time/3600;//時.timeを3600で割った値. 20 int minute = (int)time/60;//分.timeを60で割った値. 21 int second = (int)time%60;//秒.timeを60で割った余り. 22 string dayText, houText, minText, secText;//テキスト形式の日・時・分・秒を用意. 23 24 if (day < 10) 25 dayText = day.ToString (); 26 else 27// dayText = day.ToString (); 28 if (hour < 10) 29 houText = "0" + hour.ToString (); 30 else 31 houText = hour.ToString (); 32 if (minute < 10) 33 minText = "0" + minute.ToString();//ToStringでint→stringに変換. 34 else 35 minText = minute.ToString(); 36 if (second < 10) 37 secText = "0" + second.ToString();//上に同じく. 38 else 39 secText = second.ToString(); 40 41 text.text = "[Time] " + dayText + "D" + houText + ":" + minText + ":" + secText ; 42 } 43} 44

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aja

2018/05/10 07:52 編集

バックグラウンドを使おうとするとDozeがあるので、特にAndroid 8 からは難しいでしょうね
Wind

2018/05/10 08:39

「スマホの使用時間」とは何でしょう?システムが持っている累積動作時間を取得したいのか、アプリが起動してから現在までの時間を取得したいのかが不明です。後者であれば「現在の時間-起動時の時間」でいいと思いますが、違いますでしょうか?
kyuri39

2018/05/11 01:46 編集

>Windさん コメントありがとうございます。説明不足ですみません。「スマホ使用時間」=「ユーザーがスマホを触った時間」のことです。なので、累積動作時間の方が取得したいです!後者の場合は、アプリを起動した後に、スリープ状態になった場合、そのスリープした時間もカウントされてしまうので、避けたいです。 システムの累積動作時間を取得するにはどんなコードを書く必要がありますか?
aja

2018/05/11 03:05

「アプリごとに、Dozeモードを無効化」これはユーザーにホワイトリストに入れてもらうということで、開発者が設定できるものではないですね。https://qiita.com/FumihikoSHIROYAMA/items/b1d6dbda120462d0e209 例えばバックグラウンドではなくフォアグランドであれば可能だと思います。これはこれで消費電力や、システムから注意喚起されるのでどうかですが
kyuri39

2018/05/11 21:43

ご返信ありがとうございます!たしかにそうですね(泣)ユーザー側で物事を考えられていませんでした。すみません。フォアグラウンドという手もあるのですね!ありがとうございます!考えてみます!
guest

回答2

0

まず、スマホがどういう状態のときに使用中とするか、というのを定義してもらわないといけませんね

投稿2018/05/10 08:34

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kyuri39

2018/05/11 01:48 編集

ご回答ありがとうございます。説明不足ですみませんでした。スマホの使用時間をみえる化したいので、ユーザーがスマホを触っているとき=使用中にしたいと思っています!(電源ONでも、スリープ状態(画面が消えている状態)のときはカウントしません。)
guest

0

ベストアンサー

AndroidのUnityで使えるか分からないのですが、System.Environment.TickCount プロパティはどうでしょうか。(iOSのUnityにはあるようです)起動してからの累積のミリ秒数が取得できます。これが使えるならば、バックグラウンドで計測し続けなくてもいいはずです。ただ、Dozeモードを含めて、スリープするような場合にどうなるかは注意してみてください。

Unityではなく、Android Javaなら SystemClock.uptimeMillisSystemClock.elapsedRealtime が使えます。

投稿2018/05/10 08:27

dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kyuri39

2018/05/11 01:29

ご丁寧なご回答ありがとうございます!! さっそく、コードを書きたいところなのですが、プログラミング初心者なもので、ソースコードの書き方からまずよくわからない状態です泣 ネットで調べて、自分で書いてみたのですが、unityでうまく作動してくれません。 ソースコードのなかで何かおかしいところはありますか? ―――――――― using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System; public class tickcount : MonoBehaviour { int result;//時間を記録する変数. Text text; public static int TickCount { get; } class Sample { public static void Main() { int result = Environment.TickCount & Int32.MaxValue; Console.WriteLine("TickCount: {0}", result); } } }
dodox86

2018/05/11 01:42

ごめんなさい。当方、AndroidのUnityを使える環境に無いので細かいフォローはできません。ただ、ソースコードの書き方から分からない、と言うことになると、まずはUnity/Androidでの基本的なアプリの作り方を学んだ方が良いように思います。でないとこの先、アプリの完成はなかなか難しいかと。
dodox86

2018/05/11 01:46 編集

ちなみに Console.WriteLine()はAndroid Unityでは使えないと思います。teratailでも以前に良い質問回答がありましたので参考にされてください。https://teratail.com/questions/91118
kyuri39

2018/05/11 01:56

早急のご回答ありがとうございます!dodox86さんのおっしゃる通りです。新しい参考書等をみながら、unityでのアプリ開発の基本を学びなおしてきます泣 Console.WriteLine()はUnityでは使えないんですね…!知らなかったです汗 色々有力な情報を教えて下さってありがとうございました!! 出直して、がんばってきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問