1

私は現在、ユーザーが実行しているアプリケーションを監視し、対応するプロセスをデバイスに内部的に保存されているホワイトリストと照合する Android プロジェクトに取り組んでいます。

これを機能させるには、デバイスのデフォルト プロセスまたはシステム プロセスが何であるかを把握して、それらをホワイトリストに追加できるようにする必要があります。そうは言っても、あなたが答えてくれることを願っていたいくつかの質問があります。

  1. 実行しなければならないデフォルト/システム プロセスと、デバイス上のアプリに属する​​プロセスを区別する方法はありますか?

  2. ユーザーが実行しているAndroidの電話/バージョンに応じて、異なるデフォルト/システムプロセスがありますか?

  3. もしそうなら、それらのプロセス名は開発者が使用できる場所にありますか? または、それらを取得する他の方法はありますか?

さらに詳しく説明する必要がある場合は、お知らせください。助けてくれてありがとう。

4

2 に答える 2

0

私のチームと私は、これまでのところ最善の解決策を思いついたと思います。Android ドキュメントを読んだ後ActivityManager.getRunningServices()、定数FLAG_SYSTEM_PROCESSを使用することで、どのプロセスがコア システム プロセスであるかを判断できることがわかりました。次に、実行中のプロセスの合計リストと照合して、プロセスを区別するだけです。

于 2013-02-21T20:25:56.217 に答える
0

ActivityManagerと を試したとしましょうgetRunningAppProcesses()。そのオブジェクトの配列を繰り返し処理し、 ofをRunningAppProcessInfo持つものを見つけます。ドキュメントが正しい場合 (これを試していない場合)、実際に UI フォアグラウンドにあるプロセスは 1 つだけです。importanceIMPORTANCE_FOREGROUNDIMPORTANCE_FOREGROUND

startForeground()(サービスはフォアグラウンド優先度を取得するメソッドを呼び出すことができますが、私は彼らが持っていると推測していますIMPORTANCE_PERCEPTIBLE)

pkgList次に、そのフォアグラウンド プロセスを調べて、それをホワイトリストと比較できます。

ただし、これは次の場合に失敗します。

  • 何かが非同期にポップアップします (目覚まし時計アプリ、電話の着信など)。

  • 論理的にホワイトリストにあるアプリには、そのパッケージ名に影響する変更があります (たとえば、開発者が学生が支払った「プロ」アプリをリリースし、ホワイトリストには無料のアプリしかありません)。

  • デバイスに複数の表示項目がある場合 (Samsung のマルチウィンドウ機能など)、すべての表示アプリが表示されない場合IMPORTANCE_FOREGROUND

これにより、「デフォルト/システムプロセス」など、学生が制御できない純粋なバックグラウンドの問題が少なくとも解消されます。

ただし、継続的にポーリングする必要があるため、バッテリー寿命に深刻な悪影響を及ぼします。それとプライバシーへの影響を考えると、このアプリはせいぜい試験にのみ使用されるべきであり、学生が試験の直前にインストールし、試験の直後に削除できるものであるべきだということです.

于 2013-02-15T01:31:05.133 に答える