Как сообщить деятельности, что другая деятельность только началась? - PullRequest
2 голосов
/ 31 марта 2010

Я просто хочу получить количество раз, которое будет использоваться для каждого занятия. Так что я подумал, что очень простой метод - увеличить счет для Activity, когда он был запущен. Но как я могу получить информацию?

Спасибо за вашу большую помощь!

Ответы [ 4 ]

2 голосов
/ 09 апреля 2010

Наконец, я нашел решение, использую IActivityWatcher и ActivityManagerNative и встроил исходный код.

Большое спасибо T3Roar, я просто следую вашей подсказке, чтобы найти это.

пример кода ниже:

package zouyu.sample.activitymonitor;

import android.app.Activity;
import android.app.ActivityManagerNative;
import android.app.IActivityWatcher;
import android.os.Bundle;
import android.os.RemoteException;
import android.util.Log;

public class ActivityMonitor extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        try {
            ActivityManagerNative.getDefault().registerActivityWatcher(mActivityWatcher);
        } catch (RemoteException e) {
        }
    }

    private IActivityWatcher.Stub mActivityWatcher = new IActivityWatcher.Stub() {
        public void activityResuming(int activityId) throws RemoteException {
            Log.e("zouyu", "In ActivityMonitor, an Activity resuming: " + activityId);
        }

        public void closingSystemDialogs(String reason) {
            Log.e("zouyu", "In ActivityMonitor, an Activity closing: " + reason);
        }
    };
}
1 голос
/ 31 марта 2010

Я уверен, что это возможно, поскольку такие приложения, как Protector Demo, могут прослушивать открытия приложений.

В приложении Android «Запасные части» (оно есть в эмуляторе, но, вероятно, не на коммерческих телефонах), есть раздел «Статистика использования». Он записывает не только сколько раз были открыты приложения, но и сколько миллисекунд в общей сложности они были открыты.

Я не знаю, как этого добиться. Моим лучшим предположением было бы получить информацию из системы, хотя другие возможности - это прослушивание по назначению или широковещательный приемник.

Источник для запасных частей здесь, если вы хотите посмотреть:

https://android.googlesource.com/platform/development/+/gingerbread-release/apps/SpareParts/src/com/android/spare_parts/SpareParts.java

0 голосов
/ 10 июля 2015

Если вы являетесь разработчиком / партнером OEM-производителей Android, вы можете использовать IActivityController.Stub, чтобы получить то, что вам нужно.Затем вы можете использовать ActivityManagerNative, как показано ниже, чтобы начать получать события.

ActivityManagerNative.getDefault().setActivityController(activityController);

Вам необходимо где-то сохранить свои настройки белого / черного списка и сравнить их с пакетом из обратного вызова IActivityController.Stub.Например,

public boolean activityStarting(Intent intent, String pkg) {
    Slog.d(AdbLogTag.TAG, "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
    Slog.i(AdbLogTag.TAG, String.format("Application starting {intent=%s}, pkg=%s", intent, pkg));
    Slog.d(AdbLogTag.TAG, "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++");

Надеюсь, это поможет.

0 голосов
/ 31 марта 2010

У вас есть методы жизненного цикла действия, чтобы знать, когда они создаются и когда они возобновляются и т. Д. Не уверены, имеете ли вы в виду, когда он создается (onCreate), или когда он возобновляется или возвращается в фокус (onResume).

Лично я бы подкласс деятельности и приложений. Чтобы подкласс приложения, вы должны помнить, чтобы объявить имя класса приложения в вашем манифесте. Приложение может иметь HashMap с ключами Имен деятельности, со значением int числа раз, когда каждое действие возобновляется или создается (или что вы хотите).

Все ваши действия в настоящее время происходят из класса Activity. Таким образом, вы можете создать свою собственную ActivityBase, которая расширяет Activity и добавляет переопределенные методы для onCreate и onResume. Эти переопределенные методы будут вызывать метод класса Application, чтобы сообщить ему об увеличении их числа. Затем все ваши действия будут расширять ActivityBase вместо Activity.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...