我正在爲基於CM12.1的我的碩士論文定製一個android。在application.onCreate()中發送BroadcastIntent導致永遠啓動
自定義ROM的用例是捕獲任意應用程序的使用情況數據,例如,啓動,關閉和調用不同的系統資源。所有這些都應該在正常使用手機時發生。目前我想使用Application類,以便它在onCreate()方法中發送廣播意圖。
[...]
class Application extends ContextWrapper implements ComponentCallbacks2 {
[...]
public void onCreate() {
// fire intent for capturing
Bundle bundle = new Bundle();
if (mLoadedApk != null) {
bundle.putString("PACKAGE_NAME", mLoadedApk.getApplicationInfo().packageName);
bundle.putLong("CREATION_DATE", System.currentTimeMillis());
}
Intent intent = new Intent(Intent.ACTION_START_APP) // custom action added to Intent.java
.putExtras(bundle);
getApplicationContext().sendBroadcastAsUser(intent, android.os.Process.myUserHandle());
}
[...]
}
這樣我可以登錄的確切時間的應用程序啓動時,但遺憾的是我的做法的結果是設備不再啓動。在自定義圖像閃爍並啓動後,我被卡住在氰引導動畫(這是動畫,它不凍結)。工作映像離開動畫並在大約2分鐘後啓動android(也是閃存後首次啓動),但是具有自定義Application.java的我的ROM仍然在大於15分鐘後顯示啓動動畫。
我知道定期使用ActivityManager檢查運行的應用程序是可能的,但由於這是不準確的,並且會阻止CPU進入省電模式,所以我想使用這種方法。
如果我註銷sendBroadcast,一切正常。所以我想問題是ActivityManagerNative沒有運行,但我不確定這一點。
由於我無法用adb獲取日誌,我不知道在哪一點/爲什麼引導失敗。
你能告訴我如何檢查發送請求的所有先決條件是否滿足? 替代方案只有當設備啓動過程完成並掃描我相應的BroadcastReceiver中的所有打開的應用程序時,我纔可以發送我的意圖,但我不知道如何(或者即使有可能)檢查啓動過程是否完成。
在此先感謝。