Re: 他アプリの起動を検知する方法

2,435 views
Skip to first unread message

XBG

unread,
May 26, 2013, 12:01:15 PM5/26/13
to android-g...@googlegroups.com
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・・・
を検知できるそうですが、こちらは具体的なコードが分からず試せずにいます。
 
 
ご存じの方がいらっしゃいましたら、よろしくお願いします。
 
 
 
 

bina

unread,
May 26, 2013, 8:35:36 PM5/26/13
to android-g...@googlegroups.com
bina です。

ActivityManager#getRunningTasks(int) で起動しているアプリが取得出来ます。
logcat ですが、出力しない機種もあるので、注意が必要です。
Reply all
Reply to author
Forward
0 new messages