簡體   English   中英

如何在Android上以編程方式創建運行應用程序的日志?

[英]How to create log of running application programmatically on android?

我是android的新手,我想在android應用程序中創建正在運行的應用程序的日志,因此當新應用程序午餐時,它將記錄應用程序名稱以及日期和時間,並在請求時將其發送到服務器。

我搜索有關在android上運行應用程序的信息,但其中大多數使用的是API 21中棄用的getRunningTasks()

編輯:

這是讀取cmdline文件的代碼:

    private String procInfo(File cmdLine) {
    String name = null;
    String info = null;      
    try {
        BufferedReader br = new BufferedReader(new FileReader(cmdLine));
        String line;
        name = br.readLine();           
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
     Log.i("Content", file);        
    return name;
}

我可能會先從/proc/[PID]/cmdline/proc/[PID]/status查找並獲取“名稱”字段。

作為一項教育性練習,請查看Android Core中的ps 代碼

您可以創建一個服務,該服務定期監視PID列表並報告來回的PID。 要獲得名稱,請查看上述兩個文件之一。

這是一個如何完成此操作的示例:

try {
    while (true) {
        File f = new File("/proc");
        File[] files = f.listFiles();
        for (File inFile : files) {
            if (inFile.isDirectory()) {
                File cmdFile = new File(inFile, "status");
                if (cmdFile != null && cmdFile.isFile()) {
                    // Get the Name value from /proc/[PID]/status file
                    String cmdLine = procName(cmdFile);
                    if (cmdLine != null && cmdLine.length() > 0) {
                        Log.e("PS", new Date() + ", " + inFile.toString() + ", " + cmdLine);
                        // Keep Set of new PID or PID that disappear that will be sent to a server

                    }
                }
            }
        }
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
} catch (Exception e) {
    Log.e("PS", "Failed to process processes", e);
}

我把它留給您來弄清楚如何獲取文件的內容並進行解析。

此示例的輸出將是一個用逗號分隔的日期,路徑和應用程序名稱的列表:

Sun Aug 16 17:57:05 CDT 2015, /proc/1274, ng.indexservice 
Sun Aug 16 17:57:05 CDT 2015, /proc/1282, pp.galaxyfinder 
Sun Aug 16 17:57:05 CDT 2015, /proc/1298, ingbuddyservice 
Sun Aug 16 17:57:05 CDT 2015, /proc/1310, s.android.proxy 
Sun Aug 16 17:57:05 CDT 2015, /proc/1319, com.android.nfc 
Sun Aug 16 17:57:05 CDT 2015, /proc/1329, oviders.context 
Sun Aug 16 17:57:05 CDT 2015, /proc/1347, x.eventsmanager 
Sun Aug 16 17:57:05 CDT 2015, /proc/1362, .knox.seandroid 
Sun Aug 16 17:57:05 CDT 2015, /proc/1380, id.app.launcher 
Sun Aug 16 17:57:05 CDT 2015, /proc/1409, e.process.gapps 
Sun Aug 16 17:57:05 CDT 2015, /proc/1448, .service:remote 
Sun Aug 16 17:57:05 CDT 2015, /proc/1486, android.smspush 

嘗試使用Android API“ UsageStatsManager ”。 您將需要以下權限:android.permission.PACKAGE_USAGE_STATS

Calendar beginCal = Calendar.getInstance();
beginCal.set(Calendar.DATE, 1);
beginCal.set(Calendar.MONTH, 0);
beginCal.set(Calendar.YEAR, 2012);

Calendar endCal = Calendar.getInstance();
endCal.set(Calendar.DATE, 1);
endCal.set(Calendar.MONTH, 0);
endCal.set(Calendar.YEAR, 2014);

final List<UsageStats> queryUsageStats=usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_YEARLY, beginCal.getTimeInMillis(), endCal.getTimeInMillis());

您可以這樣啟動:

Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
startActivity(intent);

這是一些示例代碼: https : //github.com/googlesamples/android-AppUsageStatistics

- 克里斯

http://lograbbit.com

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM