Как сохранить статистику использования приложения в текстовом файле? - PullRequest
1 голос
/ 06 апреля 2019

Я занимаюсь разработкой приложения, которое будет предоставлять статистику использования, установленную на моем телефоне, но я хочу сохранить эту статистику (т.е. как долго приложение было открыто и в какое время и т. Д.) В файле, а не просто отображать его на экране.

Я ожидаю, что приложение будет работать в фоновом режиме и сохранит использование приложения в текстовом файле

Ответы [ 2 ]

0 голосов
/ 06 апреля 2019

Я также предоставляю то же самое, что и вы, но для меня это приложение Родительский контроль.Итак, я показываю метод, используемый для хранения истории приложения.

    private void history(AccessibilityEvent event) {
    SharedPreferences sf = getSharedPreferences("TempApp", MODE_PRIVATE);
    SharedPreferences.Editor editor = sf.edit();

        Log.i("eventSource", event.getPackageName().toString());
        try {
            appName = getPackageManager().getApplicationLabel(getPackageManager().getApplicationInfo(event.getPackageName().toString(), PackageManager.GET_META_DATA)).toString();
            Log.i("CurrentApplication", appName);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        String tempApp = sf.getString("appName", "");
        if (tempApp.equals(appName)) {
            Log.i("Current", "inside if ");
        } else {
            editor.putString("appName", appName).apply();
            Calendar cl = Calendar.getInstance();
            String time, hour, minute, second;
             hour = (cl.get(Calendar.HOUR) < 10) ? "0" + cl.get(Calendar.HOUR) : ""+ cl.get(Calendar.HOUR);
             minute = (cl.get(Calendar.MINUTE) < 10) ? "0" + cl.get(Calendar.MINUTE) : ""+ cl.get(Calendar.MINUTE);
             second = (cl.get(Calendar.SECOND) < 10) ? "0" + cl.get(Calendar.SECOND) : ""+ cl.get(Calendar.SECOND);
             time = hour + ":" + minute + ":" + second;
            if (cl.get(Calendar.AM_PM) == 0)
                time += " AM";
            else
                time += " PM";
            int timeStart= cl.get(Calendar.HOUR_OF_DAY)*60*60+cl.get(Calendar.MINUTE)*60+cl.get(Calendar.SECOND);
            editor.putInt("nowTime",timeStart).apply();
            HistoryDB hDB = new HistoryDB(getApplicationContext());
            hDB.insertData(appName);
            hDB.update(tempApp, "EndTime", time);
            int timeUsed=sf.getInt("nowTime",0)-sf.getInt("prevTime",0);
            hDB.update(tempApp, "TimeUsed",String.valueOf(timeUsed));
            hDB.update(appName, "StartTime", time);
            editor.putInt("prevTime",timeStart).apply();
        }
    }

History.java

public class HistoryDB  extends SQLiteOpenHelper {
private static String DB_NAME = "History.db";
private static int DB_VR = 1;
private static String DB_TABLE = "HistoryData";
private static SQLiteDatabase dbb;
public HistoryDB(Context context) {
    super(context, DB_NAME, null, DB_VR);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table  " +DB_TABLE + "(AppName text,StartTime text ,EndTime text,TimeUsed Integer);");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
void insertData(String appName)
{
    dbb = getWritableDatabase();
    dbb.execSQL("insert into "+ DB_TABLE + "(AppName,StartTime,EndTime,TimeUsed) values('"+appName+"',' ','                  ',0);");
    dbb.close();
}

 void update(String appName, String colName, String time) {
    dbb = getWritableDatabase();
    dbb.execSQL("update "+DB_TABLE+" set "+colName+"='"+time+"' where AppName='"+appName+"'");
    dbb.close();
}

 ArrayList<String> getData(String colName)
{
    dbb=getReadableDatabase();
    Cursor cr=dbb.rawQuery("select "+colName+" from "+DB_TABLE,null);
    ArrayList<String> arrayList=new ArrayList<>();
    while(cr.moveToNext()){
        arrayList.add(cr.getString(0));
    }
    dbb.close();
    cr.close();
    return arrayList;
}

}

0 голосов
/ 06 апреля 2019

Лучше всего хранить эти данные в общих настройках или в базе данных, такой как ObjectBox .

...