問題タブ [usagestatsmanager]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - アプリがフォアグラウンドにあるときにアプリの使用時間をカウントする方法は?
私は、毎日のアプリの使用状況を追跡するための Android アプリに取り組んでいます。アイデアは、ユーザーが任意のアプリの 1 日の制限時間を設定でき、制限を超えてから最大 2 分以内に通知が表示されるというものです。(遅延の理由:アプリの制限を超えているかどうかをチェックするJobIntentServiceを実行するために毎分オフになるAlarmManagerクラスを使用してアラーム システムを作成しました)
アプリの使用時間をカウントするために、 UsageStatsManagerクラスのqueryEventsメソッドを使用しました。
アプリの使用時間をカウントするための私のコードは次のとおりです(私はHow to use queryEvents に従いました):
つまり、上記のコードは、アプリがフォアグラウンドになったときのタイムスタンプ ( UsageEvents.Event.ACTIVITY_RESUMED ) とバックグラウンドになったときのタイムスタンプ( UsageEvents.Event.ACTIVITY_PAUSED ) の時間差をカウントします。次に、この差をアプリの合計使用時間に加算します。
問題は、アプリがバックグラウンドに移行しない限り、フォアグラウンドで費やされた時間をカウントできないことです。そのため、使用制限を超えた場合、アプリがバックグラウンドになるまで通知は表示されません。
アプリがフォアグラウンドにあるときにフォアグラウンド時間を取得することは実際に可能ですか?
注意: queryUsageStats と UsageStats.getTotalTimeInForeground() を試しましたが、 queryUsageStats にはこの質問に関連しない他の問題があったため、成功しませんでした。
android - UsageStatsManager.queryUsageStats(...) の使用方法は?
バックグラウンド
会社のタブレットでさまざまなアプリの使用状況データが必要です。最適なソリューションは、最長の時間にまたがります。ここで、UsageStatsManager クエリのいくつかを使用して、過去 2 年間のデータを取得できるはずであることを読みました。
私が試したこと
私は、UsageStatsManager.queryAndAggregateUsageStats(..)でうまくいくと考えましたが、最大約 1 週間の間隔しか返さないことがわかりました。「集計」クエリが機能していなかったので、バケット サイズを明示的に宣言できるように、次のコードを試しました。
次のような複数の異なる時間間隔を使用してみました。
私が取得できる最長の間隔は約 1 週間です。
ログの例:
今いる場所
INTERVAL_YEARLY定数は廃止されていないため、何か間違ったことをしているに違いありません。ただし、このAPIやこのような他の投稿から、この API は大雑把であると推測しました。
私の次の動きは、UsageStatsManager.queryEvents(..)を介して独自の統計を作成することです。これは、より一貫性があり明確に見えます。
質問
- 何が問題ですか?
- UsageStatsManager のデータは信頼に値しますか?
仕様とコード
私のデバイスは Android 9.0 Samsung Galaxy Active Tab2 です。
フル機能はこちら!
私が使用する権限!