logcatに書き込まれる文字列について、単純に正規表現を駆使すれば可能です。
◆例)A34 Browser(自作アプリのですみません)でdメニューを開いた時のログ
05-27 00:10:34.714: I/ActivityManager(568): START {act=android.intent.action.VIEW dat=
http://smt.docomo.ne.jp/?default cmp=jp.htxa58.el.siux/.MainBrowserActivity u=0} from pid 4185
この方法だとServiceなどの常駐クラス上から直近のログを秒単位で取得して、act=android.intent.action.MAINに一致するものがあればそこから処理を開始する、という流れになります。
大雑把に書けば"^W.+?=.+?[\s|\}]"みたいな感じでマッチングさせれば、必要な情報は手に入るのではないかと。
eclipse上ではエスケープシークエンスの扱いが特殊で"\s"あたりは"\\s"にするとか普通に半角スペースを打つとかしないとマッチしてもらえない点に注意してください。
アクティビティ名はcmp=のパラメータにありますが、これを途中の/までのみを抜き出すことでパッケージ名も手に入ってしまいます。
ここから起動したアプリの情報を読み取りたい場合は別途PackageManagerを利用すればOKです。
2013年5月20日月曜日 21時51分42秒 UTC+9 鈴木伊知郎:
鈴木と申します。
他アプリの起動を検知する方法を探しています。
他のアプリが起動するときの android.intent.action.MAIN を
検知することは可能でしょうか。
BroadcastReceiverなどを試してみましたが上手くいきませんでした。
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Set<String> category = intent.getCategories();
if (action.equals(Intent.ACTION_MAIN)) {
context.startService(new Intent(context, MyService.class));
}
}
また、logcatを監視することで ActivityManager: Starting: Intent { act=android.intent.action.MAIN・・・
を検知できるそうですが、こちらは具体的なコードが分からず試せずにいます。
ご存じの方がいらっしゃいましたら、よろしくお願いします。