2013-02-16 3 views
1

Я хотел бы знать цель foloowing два файла:ActivityWatcher & ProcessObserver

рамки/база/ядро ​​/ Java/Android/приложение/IActivityWatcher.aidl
[Описание: Обратный звонок интерфейс для просмотра обхода пользователя через деятельности.]

рамки/база/ядро ​​/ Java/Android/приложение/IProcessObserver.aidl
[нет описания]

Я пытаюсь создать приложение, в котором пользователь может решить, какие приложения могут быть запущены в течение частности период времени (скажем, от 10а м до 4 вечера).
Есть ли способ, когда мое приложение получит уведомление, если приложение, указанное пользователем, начнет? Таким образом, мое приложение убить команду можно отправить (я предполагаю, что корневой доступ доступен.)

ответ

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 Вы можете использовать следующие фрагменты кода, чтобы получить имя пакета погонных переднего плана деятельности:

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

FYI, я пытался использовать отражение для вызова '' 'registerProcessObserver''', но этот метод требует' '' android.permission. SET_ACTIVITY_WATCHER''', который удален в android 4.4 –