如何在android上以编程方式创建运行应用程序的日志?

时间:2015-08-14 06:29:43

标签: android

我是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;
}

2 个答案:

答案 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

- 克里斯

http://lograbbit.com