1

我想知道以下两个文件的目的:

frameworks/base/core/java/android/app/IActivityWatcher.aidl
【描述:回调接口,观察用户遍历活动。】

frameworks/base/core/java/android/app/IProcessObserver.aidl
[无描述]

我正在尝试构建一个应用程序,其中用户可以决定哪些应用程序可以在特定时间段内运行(例如,从上午 10 点到下午 4 点)。
如果用户指定的应用程序启动,我的应用程序有什么方法会收到通知?这样我的应用程序可以发送 kill 命令(我假设 root 访问是可用的。)

4

1 回答 1

1

似乎IActivityWatcher已经从 JellyBean 开始删除了,为了监控哪个Activity在前台运行,您可以使用IProcessObserver如下:

mActivityManagerNative = ActivityManagerNative.getDefault();
if (mActivityManagerNative != null) {
    try {
        mActivityManagerNative.registerProcessObserver(mProcessObserver);
    } catch (RemoteException e) {
        Log.e("TAG", "onCreate() RemoteException!");
    }
 }

private IProcessObserver.Stub mProcessObserver = new IProcessObserver.Stub() {
    @Override
    public void onForegroundActivitiesChanged(int pid, int uid, boolean foregroundActivities) {
       doWhatUWantHere();
    }

    @Override
    public void onImportanceChanged(int pid, int uid, int importance) {
    }

    @Override
    public void onProcessDied(int pid, int uid) {
    }
};

PS 可以使用以下代码片段获取前台运行Activity的包名:

private String getForegroundPackage() {
    ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
    List<RecentTaskInfo> taskInfo = am.getRecentTasks(1,
            ActivityManager.RECENT_IGNORE_UNAVAILABLE);
    return taskInfo.isEmpty()
            ? null : taskInfo.get(0).baseIntent.getComponent().getPackageName();
}
于 2013-06-28T01:53:41.653 回答