Как проверить, был ли открыт браузер Android по умолчанию?

Возможный дубликат: Как проверить, работает ли приложение на Android?

Я хотел бы знать, есть ли способ проверить, был ли открыт браузер Android по умолчанию (браузер в ОС Android). Предположим, он открыт, я хотел бы, чтобы отображался тост. Как я могу сделать это программно?

Это код, который я использовал в классе, расширяющем класс Service, который прослушивает журналы и проверяет, был ли открыт браузер Android по умолчанию. Если да, то журнал печатается в LogCat о том, что был открыт браузер Android по умолчанию.

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());
}

person Ingrid Cooper    schedule 30.07.2012    source источник


Ответы (1)


Google сказал в Google IO, что такое поведение считается вредоносным ПО.

однако вплоть до API 15 (включительно) можно использовать сервис, который прослушивает логи и проверяет, запущено ли нужное приложение. это потому, что каждый раз, когда вы запускаете приложение, Android пишет об этом в журнал.

это считается обходным путем, но многие приложения используют его, и он отлично работает.

не уверен, что в новой версии (API 16) чтение журналов будет таким простым. они сказали, что разрешение на чтение из журналов больше не будет работать, и вместо этого они разрешают приложениям читать свои собственные журналы (без каких-либо разрешений).

конечно, если приложение, которое вы пытаетесь отслеживать, предоставляет какой-либо API, чтобы сообщить миру (например, через намерение), что оно запущено, вы можете использовать его. Я не думаю, что встроенный веб-браузер делает это.

person android developer    schedule 30.07.2012
comment
Спасибо за ваш ответ. Я создам службу, которая слушает журналы и посмотрит, работает ли она. - person Ingrid Cooper; 30.07.2012
comment
вы также можете использовать службу переднего плана, чтобы избежать ее уничтожения операционной системой в некоторых случаях. - person android developer; 30.07.2012
comment
Я создал службу, которая слушает журналы, и это сработало. Итак, теперь я знаю, когда был открыт веб-браузер Android по умолчанию. Спасибо за помощь. - person Ingrid Cooper; 31.07.2012
comment
было бы неплохо, если бы вы написали соответствующую часть кода ответа, чтобы другие могли ее прочитать. - person android developer; 31.07.2012
comment
Процесс mLogcatProc=null;BufferedReader reader=null;mLogcatProc=Runtime.getRuntime().exec(new String[]{logcat, -d});reader=new BufferedReader(new InputStreamReader(mLogcatProc.getInputStream()));String line ;финальный журнал StringBuilder=новый StringBuilder();разделитель строк=System.getProperty(line.separator);в то время как ((line=reader.readLine())!=null){log.append(строка);log.append(разделитель );}String w = log.toString();if(w.contains(Начальная активность:Intent {act=android.intent.action.MAIN flg=0x10000000 cmp=com.android.browser/.BrowserActivity})){Журнал .d(LogService, Браузер был открыт);}} - person Ingrid Cooper; 01.08.2012
comment
Это код, который я использовал в классе, расширяющем класс Service, который прослушивает журналы и проверяет, был ли открыт браузер Android по умолчанию. Если это так, то он печатает журнал в Logcat, в котором говорится, что браузер Android по умолчанию был открыт. - person Ingrid Cooper; 01.08.2012
comment
ммм... в комментариях код не читается и никак не форматируется. вам лучше отредактировать исходный пост (вопрос) и добавить туда ответ и код. - person android developer; 01.08.2012