Search code examples
androidandroid-browser

How to check if the Android default browser has been opened?


Possible Duplicate: How can I check if an app running on Android?

I would like to know if there is a way to check if the Android default browser (browser in Android OS) has been opened. Suppose it's opened, I would like a toast to be displayed. How can I do this programmatically?

This is the code that I used in the class that extends the Service class which listens to the logs and checks if the Android default browser has been opened. If it is then it prints a log in the LogCat stating that the Android default browser has been opened.

try {
    Process mLogcatProc = null;
    BufferedReader reader = null;
    mLogcatProc = Runtime.getRuntime().exec(new String[] { "logcat", "-d" });

    reader = new BufferedReader(new InputStreamReader(mLogcatProc.getInputStream()));

    String line;
    final StringBuilder log = new StringBuilder();
    String separator = System.getProperty("line.separator");

    while ((line = reader.readLine()) != null) {
        log.append(line);
        log.append(separator);
    }
    String w = log.toString();
    Log.d("LogService", "The log is: " + w);

    if (w.contains("Starting activity: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.android.browser/.BrowserActivity }")) {
        Log.d("LogService", "The browser has been opened");
    }

}
catch (Exception e) {
    Log.d("LogService", "The stacktrace is: " + e.getMessage());
}

Solution

  • google said on the google IO that such a behavior is considered as malware .

    however , up until API 15 (including) , you can use a service that listens to the logs , and check if the desired app has started . that's because each time you run an app , android writes to the log about it .

    this is considered as a workaround but a lot of apps use it and it works fine .

    not sure if on the new version (API 16) reading logs would be that simple . they said that the permission to read from logs won't work anymore , and that they allow apps to read their own logs instead (without any permission needed) .

    of course , if the app you are trying to monitor gives any kind of API to tell the world (via intent for example) that it has started , you can use it . i don't think that the built in web browser does that , though.