6

発信通話を (とりわけ) 監視 (および解析) するためにアプリが必要です。

  • その「NEW_OUTGOING_CALL」のブロードキャストがありますが、通話の開始時に起動され、実際にいつ終了したかを知る必要があります。
  • そのために、PhoneStateListener「LISTEN_CALL_STATE」を作成してリッスンできますが、コールがまだコール ログ データベース内にないため、すぐに再起動されます。(タイマーを起動することはできましたが..バーク..)
  • 最後の手段ContentObserverとして、CallLog URI に a を追加して (複数の呼び出しを削除し)、新しいエントリを検出することができます。

それが実際に私がやろうとしている方法です(3番目のオプション)が、そのためにはもちろんContentObserverを登録する必要があるため、質問:どこにいつ登録する必要がありますか?

どうやら、答えは次のようServiceです。..
しかし、いつサービスを開始するのですか?

  • 不足しているエントリに追いつくためにアプリケーションの開始時に必要なので、すべての「呼び出し可能な」アクティビティからサービスを開始する必要があります...ここでは、アプリを手動で開く必要があり、再起動後に問題になる可能性があります。
  • 新しい呼び出しが行われるたびに必要です。BroadcastListener「NEW_OUTGOING_CALL」をオンにして実現でき、まだオンになっていない場合はサービスを開始します。ここで再起動の問題を取り除きます (アプリが一度起動され、それ以降ユーザーによって強制終了されていない限り)

しかし、それらを 内に登録することによって何が問題になるのでしょうApplication.OnCreate() か?

  • 私はすでにアプリケーションをサブクラス化する必要があります(または少なくともそれが私が他のことを処理した方法です)
  • 私の理解では、Application.OnCreate()とにかく、私のいずれかActivityが作成されたとき(初回)、またはBroadcastReceiver(再起動後)サービスが開始されたときに、私のプロセスを開始する必要があるものはすべて呼び出されます...
  • Service私のプロセスが生きている限り生き続けます。
  • そのための余分なものは必要ありませServiceん。バインド、開始などは必要ありません...

それで、 ContentObserver を登録するのに何か問題がありますか、Application.OnCreate()またはそのために a を使用する利点は何Serviceですか?

アップデート :

プロサービスでは、次のことを発見しました:

  • アプリケーションを boot_time に開始したい場合は、BroadcastReceiver右の「BOOT_COMPLETED」をリッスンしますか? したがって、プロセスが作成され、登録できますContentObservers...しかし、すぐに破棄されます:

    07-24 15:44:50.260: I/ActivityManager(531): No longer want com.test.test (pid 1829): empty #17

これは、Android が「レベル 5 : 空のプロセス」としてフラグを立てたためです。なんで ?ContentObservers を登録しても、プロセスが「空ではない」わけではないためです。
一方、サービスを開始すると、私のプロセスは「レベル 3 : サービス プロセス」になり、(少なくともすぐには..) クリーンアップされないため、後でアプリを起動すると、プロセスはすでに静かにここにあります。聞いている...

4

0 に答える 0