我是android新手,我想在我的Android应用程序中创建运行应用程序的日志,所以当新应用程序被启动时,它会记录应用程序名称以及日期和时间,并在请求时将其发送到服务器。
我在android上搜索运行应用程序,但大多数使用{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;
}
答案 0 :(得分:1)
我可能会先查看/proc/[PID]/cmdline
或/proc/[PID]/status
并获取"名称"字段。
通过教育练习,您可以查看Android Core中的ps
code。
您可以创建一个定期监视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);
}
我已经告诉你了解如何获取文件的内容并解析它。
此示例的输出将是逗号分隔的日期,路径和appname列表:
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
答案 1 :(得分:0)
试用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
- 克里斯