![](/img/trans.png)
[英]android how to capture only my log entries in the application programmatically
[英]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
- 克里斯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.