이윤영

Add other extract function

...@@ -4,8 +4,10 @@ ...@@ -4,8 +4,10 @@
4 <component name="GradleSettings"> 4 <component name="GradleSettings">
5 <option name="linkedExternalProjectsSettings"> 5 <option name="linkedExternalProjectsSettings">
6 <GradleProjectSettings> 6 <GradleProjectSettings>
7 + <compositeConfiguration>
8 + <compositeBuild compositeDefinitionSource="SCRIPT" />
9 + </compositeConfiguration>
7 <option name="delegatedBuild" value="false" /> 10 <option name="delegatedBuild" value="false" />
8 - <option name="testRunner" value="PLATFORM" />
9 <option name="distributionType" value="DEFAULT_WRAPPED" /> 11 <option name="distributionType" value="DEFAULT_WRAPPED" />
10 <option name="externalProjectPath" value="$PROJECT_DIR$" /> 12 <option name="externalProjectPath" value="$PROJECT_DIR$" />
11 <option name="modules"> 13 <option name="modules">
...@@ -15,6 +17,7 @@ ...@@ -15,6 +17,7 @@
15 </set> 17 </set>
16 </option> 18 </option>
17 <option name="resolveModulePerSourceSet" value="false" /> 19 <option name="resolveModulePerSourceSet" value="false" />
20 + <option name="testRunner" value="PLATFORM" />
18 </GradleProjectSettings> 21 </GradleProjectSettings>
19 </option> 22 </option>
20 </component> 23 </component>
......
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="VcsDirectoryMappings">
4 + <mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
5 + </component>
6 +</project>
...\ No newline at end of file ...\ No newline at end of file
...@@ -5,8 +5,8 @@ android { ...@@ -5,8 +5,8 @@ android {
5 buildToolsVersion "29.0.2" 5 buildToolsVersion "29.0.2"
6 defaultConfig { 6 defaultConfig {
7 applicationId "com.example.dataextraction" 7 applicationId "com.example.dataextraction"
8 - minSdkVersion 28 8 + minSdkVersion 23
9 - targetSdkVersion 29 9 + targetSdkVersion 28
10 versionCode 1 10 versionCode 1
11 versionName "1.0" 11 versionName "1.0"
12 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 12 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
......
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 + xmlns:tools="http://schemas.android.com/tools"
3 package="com.example.dataextraction"> 4 package="com.example.dataextraction">
4 - 5 + <uses-permission
6 + android:name="android.permission.PACKAGE_USAGE_STATS"
7 + tools:ignore="ProtectedPermissions" />
5 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 8 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
6 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 9 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
7 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 10 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
8 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 11 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
9 <uses-permission android:name="android.permission.READ_CALENDAR" /> 12 <uses-permission android:name="android.permission.READ_CALENDAR" />
13 + <uses-permission android:name="android.permission.READ_CONTACTS" />
14 + <uses-permission android:name="android.permission.READ_CALL_LOG" />
15 + <uses-permission android:name="android.permission.READ_SMS" />
16 + <uses-permission android:name="android.permission.READ_PHONE_STATE" />
17 + <uses-permission android:name="android.permission.GET_ACCOUNTS" />
18 + <uses-permission android:name="android.permission.INTERNET" />
19 + <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
10 20
11 <application 21 <application
12 android:allowBackup="true" 22 android:allowBackup="true"
......
...@@ -5,6 +5,7 @@ import android.content.Context; ...@@ -5,6 +5,7 @@ import android.content.Context;
5 import android.database.SQLException; 5 import android.database.SQLException;
6 import android.database.sqlite.SQLiteDatabase; 6 import android.database.sqlite.SQLiteDatabase;
7 import android.database.sqlite.SQLiteOpenHelper; 7 import android.database.sqlite.SQLiteOpenHelper;
8 +import android.util.Log;
8 9
9 import androidx.annotation.Nullable; 10 import androidx.annotation.Nullable;
10 11
...@@ -27,6 +28,13 @@ public class DBHelper { ...@@ -27,6 +28,13 @@ public class DBHelper {
27 db.execSQL(VideoDataBase.CreateDB._CREATE0); 28 db.execSQL(VideoDataBase.CreateDB._CREATE0);
28 db.execSQL(AudioDataBase.CreateDB._CREATE0); 29 db.execSQL(AudioDataBase.CreateDB._CREATE0);
29 db.execSQL(CalendarDataBase.CreateDB._CREATE0); 30 db.execSQL(CalendarDataBase.CreateDB._CREATE0);
31 + db.execSQL(Databases.CreateDB_App._CREATE_AppInfo);
32 + db.execSQL(Databases.CreateDB_AccountInfo._CREATE_AccountInfo);
33 + db.execSQL(Databases.CreateDB_AppUsage_YEAR._CREATE_AppUsage_YEAR);
34 + db.execSQL(Databases.CreateDB_AppUsage_MONTH._CREATE_AppUsage_MONTH);
35 + db.execSQL(Databases.CreateDB_AppUsage_WEEK._CREATE_AppUsage_WEEK);
36 + db.execSQL(Databases.CreateDB_AppUsage_DAY._CREATE_AppUsage_DAY);
37 + db.execSQL(Databases.CreateDB_PhoneInfo._CREATE_PhoneInfo);
30 } 38 }
31 39
32 @Override 40 @Override
...@@ -35,6 +43,14 @@ public class DBHelper { ...@@ -35,6 +43,14 @@ public class DBHelper {
35 db.execSQL("DROP TABLE IF EXISTS " + VideoDataBase.CreateDB._TABLENAME0); 43 db.execSQL("DROP TABLE IF EXISTS " + VideoDataBase.CreateDB._TABLENAME0);
36 db.execSQL("DROP TABLE IF EXISTS " + AudioDataBase.CreateDB._TABLENAME0); 44 db.execSQL("DROP TABLE IF EXISTS " + AudioDataBase.CreateDB._TABLENAME0);
37 db.execSQL("DROP TABLE IF EXISTS " + CalendarDataBase.CreateDB._TABLENAME0); 45 db.execSQL("DROP TABLE IF EXISTS " + CalendarDataBase.CreateDB._TABLENAME0);
46 + db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_App.TABLE_NAME);
47 + db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_AccountInfo.TABLE_NAME);
48 + db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_AppUsage_YEAR.TABLE_NAME);
49 + db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_AppUsage_MONTH.TABLE_NAME);
50 + db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_AppUsage_WEEK.TABLE_NAME);
51 + db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_AppUsage_DAY.TABLE_NAME);
52 + db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_PhoneInfo.TABLE_NAME);
53 +
38 onCreate(db); 54 onCreate(db);
39 } 55 }
40 } 56 }
...@@ -122,4 +138,113 @@ public class DBHelper { ...@@ -122,4 +138,113 @@ public class DBHelper {
122 values.put(CalendarDataBase.CreateDB.RDATE, r_date); 138 values.put(CalendarDataBase.CreateDB.RDATE, r_date);
123 return mDB.insert(CalendarDataBase.CreateDB._TABLENAME0, null, values); 139 return mDB.insert(CalendarDataBase.CreateDB._TABLENAME0, null, values);
124 } 140 }
141 +
142 + //Package 정보에 Network 사용량 추가
143 + public void addAppInfo(String packageName, String versionName, String applicationName
144 + , long firstInstallTime, long lastUpdateTime, long wifibytes, long cellularbytes) {
145 + SQLiteDatabase db = mDBHelper.getWritableDatabase();
146 + String wifi = String.valueOf(wifibytes);
147 + String cellular = String.valueOf(cellularbytes);
148 + ContentValues values = new ContentValues();
149 + values.put(Databases.CreateDB_App.PACKAGENAME, packageName);
150 + values.put(Databases.CreateDB_App.VERSION, versionName);
151 + values.put(Databases.CreateDB_App.NAME, applicationName);
152 + values.put(Databases.CreateDB_App.FIRSTINSTALL, firstInstallTime);
153 + values.put(Databases.CreateDB_App.LASTUPDATE, lastUpdateTime);
154 + values.put(Databases.CreateDB_App.WIFIUSAGE, wifibytes);
155 + values.put(Databases.CreateDB_App.CELLULARUSAGE, cellularbytes);
156 + db.insert(Databases.CreateDB_App.TABLE_NAME, null, values);
157 +
158 + Log.d("LogTest","addAppUsage");
159 +
160 + Log.d("LogTest", String.valueOf(cellularbytes));
161 + }
162 + public void addAccountInfo(String accountname, String accounttype) {
163 + SQLiteDatabase db = mDBHelper.getWritableDatabase();
164 + ContentValues values = new ContentValues();
165 + values.put(Databases.CreateDB_AccountInfo.ACCOUNTNAME, accountname);
166 + values.put(Databases.CreateDB_AccountInfo.ACCOUNTTYPE, accounttype);
167 + db.insert(Databases.CreateDB_AccountInfo.TABLE_NAME, null, values);
168 + Log.d("LogTest","addAccountInfo");
169 + }
170 +
171 + public void addAppUsage_YEAR(String packageName, long firsttimestamp, long lasttimestamp,
172 + long lasttimeused, long totaltimeforeground) {
173 + SQLiteDatabase db = mDBHelper.getWritableDatabase();
174 + ContentValues values = new ContentValues();
175 + values.put(Databases.CreateDB_AppUsage_YEAR.PACKAGENAME, packageName);
176 + values.put(Databases.CreateDB_AppUsage_YEAR.FIRSTTIMESTAMP, firsttimestamp);
177 + values.put(Databases.CreateDB_AppUsage_YEAR.LASTIMESTAMP, lasttimestamp);
178 + values.put(Databases.CreateDB_AppUsage_YEAR.LASTTIMEUSED, lasttimeused);
179 + values.put(Databases.CreateDB_AppUsage_YEAR.TOTALTIMEFOREGROUND, totaltimeforeground);
180 + db.insert(Databases.CreateDB_AppUsage_YEAR.TABLE_NAME, null, values);
181 + Log.d("LogTest","addAppUsageYear");
182 + }
183 +
184 + public void addAppUsage_MONTH(String packageName, long firsttimestamp, long lasttimestamp,
185 + long lasttimeused, long totaltimeforeground) {
186 + SQLiteDatabase db = mDBHelper.getWritableDatabase();
187 + ContentValues values = new ContentValues();
188 + values.put(Databases.CreateDB_AppUsage_MONTH.PACKAGENAME, packageName);
189 + values.put(Databases.CreateDB_AppUsage_MONTH.FIRSTTIMESTAMP, firsttimestamp);
190 + values.put(Databases.CreateDB_AppUsage_MONTH.LASTIMESTAMP, lasttimestamp);
191 + values.put(Databases.CreateDB_AppUsage_MONTH.LASTTIMEUSED, lasttimeused);
192 + values.put(Databases.CreateDB_AppUsage_MONTH.TOTALTIMEFOREGROUND, totaltimeforeground);
193 + db.insert(Databases.CreateDB_AppUsage_MONTH.TABLE_NAME, null, values);
194 + Log.d("LogTest","addAppUsageMonth");
195 + }
196 +
197 + public void addAppUsage_WEEK(String packageName, long firsttimestamp, long lasttimestamp,
198 + long lasttimeused, long totaltimeforeground) {
199 + SQLiteDatabase db = mDBHelper.getWritableDatabase();
200 + ContentValues values = new ContentValues();
201 + values.put(Databases.CreateDB_AppUsage_WEEK.PACKAGENAME, packageName);
202 + values.put(Databases.CreateDB_AppUsage_WEEK.FIRSTTIMESTAMP, firsttimestamp);
203 + values.put(Databases.CreateDB_AppUsage_WEEK.LASTIMESTAMP, lasttimestamp);
204 + values.put(Databases.CreateDB_AppUsage_WEEK.LASTTIMEUSED, lasttimeused);
205 + values.put(Databases.CreateDB_AppUsage_WEEK.TOTALTIMEFOREGROUND, totaltimeforeground);
206 + db.insert(Databases.CreateDB_AppUsage_WEEK.TABLE_NAME, null, values);
207 + Log.d("LogTest","addAppUsageWeek");
208 + }
209 +
210 + public void addAppUsage_DAY(String packageName, long firsttimestamp, long lasttimestamp,
211 + long lasttimeused, long totaltimeforeground) {
212 + SQLiteDatabase db = mDBHelper.getWritableDatabase();
213 + ContentValues values = new ContentValues();
214 + values.put(Databases.CreateDB_AppUsage_DAY.PACKAGENAME, packageName);
215 + values.put(Databases.CreateDB_AppUsage_DAY.FIRSTTIMESTAMP, firsttimestamp);
216 + values.put(Databases.CreateDB_AppUsage_DAY.LASTIMESTAMP, lasttimestamp);
217 + values.put(Databases.CreateDB_AppUsage_DAY.LASTTIMEUSED, lasttimeused);
218 + values.put(Databases.CreateDB_AppUsage_DAY.TOTALTIMEFOREGROUND, totaltimeforeground);
219 + db.insert(Databases.CreateDB_AppUsage_DAY.TABLE_NAME, null, values);
220 + Log.d("LogTest","addAppUsageDay");
221 + }
222 + public void addPhoneInfo(int phonetype, String softwarenumber, String phonenumber, String subscriberid,
223 + String adid, int callstate, int datastate,
224 + int networktype, String networkcountryiso, String simcountryiso,
225 + String networkoperater, String simoperator, String networkoperatorname,
226 + String simoperatorname, String simserialnumber, int simstate,
227 + boolean isnetworkroming) {
228 + SQLiteDatabase db = mDBHelper.getWritableDatabase();
229 + ContentValues values = new ContentValues();
230 + values.put(Databases.CreateDB_PhoneInfo.PHONETYPE, phonetype);
231 + values.put(Databases.CreateDB_PhoneInfo.SOFTWARENUMBER, softwarenumber);
232 + values.put(Databases.CreateDB_PhoneInfo.PHONENUMBER, phonenumber);
233 + values.put(Databases.CreateDB_PhoneInfo.SUBSCRIBERID, subscriberid);
234 + values.put(Databases.CreateDB_PhoneInfo.ADID, adid);
235 + values.put(Databases.CreateDB_PhoneInfo.CALLSTATE, callstate);
236 + values.put(Databases.CreateDB_PhoneInfo.DATASTATE, datastate);
237 + values.put(Databases.CreateDB_PhoneInfo.NETWORKTYPE, networktype);
238 + values.put(Databases.CreateDB_PhoneInfo.NETWORKCOUNTRYISO, networkcountryiso);
239 + values.put(Databases.CreateDB_PhoneInfo.SIMCOUNTRYISO, simcountryiso);
240 + values.put(Databases.CreateDB_PhoneInfo.NETWORKOPERATER, networkoperater);
241 + values.put(Databases.CreateDB_PhoneInfo.SIMOPERATOR, simoperator);
242 + values.put(Databases.CreateDB_PhoneInfo.NETWORKOPERATORNAME, networkoperatorname);
243 + values.put(Databases.CreateDB_PhoneInfo.SIMOPERATORNAME, simoperatorname);
244 + values.put(Databases.CreateDB_PhoneInfo.SIMSERIALNUMBER, simserialnumber);
245 + values.put(Databases.CreateDB_PhoneInfo.SIMSTATE, simstate);
246 + values.put(Databases.CreateDB_PhoneInfo.ISNETWORKROMING, isnetworkroming);
247 + db.insert(Databases.CreateDB_PhoneInfo.TABLE_NAME, null, values);
248 + Log.d("LogTest","addPhoneInfo");
249 + }
125 } 250 }
......
1 +package com.example.dataextraction;
2 +
3 +import android.provider.BaseColumns;
4 +
5 +import java.lang.reflect.Field;
6 +
7 +//데이터베이스 클래스
8 +public final class Databases {
9 +
10 + private Databases() {}
11 +
12 + public static final class CreateDB_App implements BaseColumns {
13 + public static final String TABLE_NAME = "AppInfo";
14 + public static final String PACKAGENAME = "packagename";
15 + public static final String VERSION = "version";
16 + public static final String NAME = "name";
17 + public static final String FIRSTINSTALL = "firstinstall";
18 + public static final String LASTUPDATE = "lastupdate";
19 + public static final String WIFIUSAGE = "wifiusage";
20 + public static final String CELLULARUSAGE = "cellularusage";
21 + public static final String USAGETIME = "usagetime";
22 + public static final String _CREATE_AppInfo = "create table if not exists "+TABLE_NAME+"("
23 + +PACKAGENAME+" text not null primary key, "
24 + +VERSION+" text not null , "
25 + +NAME+" text not null , "
26 + +FIRSTINSTALL+" timestamp not null , "
27 + +LASTUPDATE+" timestamp not null , "
28 + +WIFIUSAGE+" bigint not null , "
29 + +CELLULARUSAGE+" bigint not null);";
30 + }
31 +
32 + public static final class CreateDB_AppUsage_YEAR implements BaseColumns {
33 + public static final String TABLE_NAME = "AppUsageYear";
34 + public static final String PACKAGENAME = "packagename";
35 + public static final String FIRSTTIMESTAMP = "firsttimestamp";
36 + public static final String LASTIMESTAMP = "lasttimestamp";
37 + public static final String LASTTIMEUSED = "lasttimeused";
38 + public static final String TOTALTIMEFOREGROUND = "totaltimeforeground";
39 + public static final String _CREATE_AppUsage_YEAR = "create table if not exists "+TABLE_NAME+"("
40 + +PACKAGENAME+" text not null , "
41 + +FIRSTTIMESTAMP+" timestamp not null , "
42 + +LASTIMESTAMP+" timestamp not null , "
43 + +LASTTIMEUSED+" timestamp not null , "
44 + +TOTALTIMEFOREGROUND+" bigint not null default 0, primary key(" +PACKAGENAME +"," + FIRSTTIMESTAMP+ "));";
45 + }
46 +
47 + public static final class CreateDB_AppUsage_MONTH implements BaseColumns {
48 + public static final String TABLE_NAME = "AppUsageMonth";
49 + public static final String PACKAGENAME = "packagename";
50 + public static final String FIRSTTIMESTAMP = "firsttimestamp";
51 + public static final String LASTIMESTAMP = "lasttimestamp";
52 + public static final String LASTTIMEUSED = "lasttimeused";
53 + public static final String TOTALTIMEFOREGROUND = "totaltimeforeground";
54 + public static final String _CREATE_AppUsage_MONTH = "create table if not exists "+TABLE_NAME+"("
55 + +PACKAGENAME+" text not null , "
56 + +FIRSTTIMESTAMP+" timestamp not null , "
57 + +LASTIMESTAMP+" timestamp not null , "
58 + +LASTTIMEUSED+" timestamp not null , "
59 + +TOTALTIMEFOREGROUND+" bigint not null default 0, primary key(" +PACKAGENAME +"," + FIRSTTIMESTAMP+ "));";
60 + }
61 +
62 + public static final class CreateDB_AppUsage_WEEK implements BaseColumns {
63 + public static final String TABLE_NAME = "AppUsageWeek";
64 + public static final String PACKAGENAME = "packagename";
65 + public static final String FIRSTTIMESTAMP = "firsttimestamp";
66 + public static final String LASTIMESTAMP = "lasttimestamp";
67 + public static final String LASTTIMEUSED = "lasttimeused";
68 + public static final String TOTALTIMEFOREGROUND = "totaltimeforeground";
69 + public static final String _CREATE_AppUsage_WEEK = "create table if not exists "+TABLE_NAME+"("
70 + +PACKAGENAME+" text not null , "
71 + +FIRSTTIMESTAMP+" timestamp not null , "
72 + +LASTIMESTAMP+" timestamp not null , "
73 + +LASTTIMEUSED+" timestamp not null , "
74 + +TOTALTIMEFOREGROUND+" bigint not null default 0, primary key(" +PACKAGENAME +"," + FIRSTTIMESTAMP+ "));";
75 + }
76 +
77 + public static final class CreateDB_AppUsage_DAY implements BaseColumns {
78 + public static final String TABLE_NAME = "AppUsageDay";
79 + public static final String PACKAGENAME = "packagename";
80 + public static final String FIRSTTIMESTAMP = "firsttimestamp";
81 + public static final String LASTIMESTAMP = "lasttimestamp";
82 + public static final String LASTTIMEUSED = "lasttimeused";
83 + public static final String TOTALTIMEFOREGROUND = "totaltimeforeground";
84 + public static final String _CREATE_AppUsage_DAY = "create table if not exists "+TABLE_NAME+"("
85 + +PACKAGENAME+" text not null , "
86 + +FIRSTTIMESTAMP+" timestamp not null , "
87 + +LASTIMESTAMP+" timestamp not null , "
88 + +LASTTIMEUSED+" timestamp not null , "
89 + +TOTALTIMEFOREGROUND+" bigint not null default 0, primary key(" +PACKAGENAME +"," + FIRSTTIMESTAMP+ "));";
90 + }
91 +
92 + public static final class CreateDB_AccountInfo implements BaseColumns {
93 + public static final String TABLE_NAME = "AccountInfo";
94 + public static final String ACCOUNTNAME = "accountname";
95 + public static final String ACCOUNTTYPE = "accounttype";
96 + public static final String _CREATE_AccountInfo = "create table if not exists "+TABLE_NAME+"("
97 + +ACCOUNTNAME+" text not null , "
98 + +ACCOUNTTYPE+" text not null , primary key(" + ACCOUNTNAME + "," + ACCOUNTTYPE + ")) ";
99 + }
100 +
101 + public static final class CreateDB_PhoneInfo implements BaseColumns {
102 + public static final String TABLE_NAME = "PhoneInfo";
103 + public static final String PHONETYPE = "phonetype";
104 + public static final String SOFTWARENUMBER = "softwarenumber";
105 + public static final String PHONENUMBER = "phonenumber";
106 + public static final String SUBSCRIBERID = "subscriberid";
107 + public static final String ADID = "adid";
108 + public static final String CALLSTATE = "callstate";
109 + public static final String DATASTATE = "datastate";
110 + public static final String NETWORKTYPE = "networktype";
111 + public static final String NETWORKCOUNTRYISO = "networkcountryiso";
112 + public static final String SIMCOUNTRYISO = "simcountryiso";
113 + public static final String NETWORKOPERATER = "networkoperater";
114 + public static final String SIMOPERATOR = "simoperator";
115 + public static final String NETWORKOPERATORNAME = "networkoperatorname";
116 + public static final String SIMOPERATORNAME = "simoperatorname";
117 + public static final String SIMSERIALNUMBER = "simserialnumber";
118 + public static final String SIMSTATE = "simstate";
119 + public static final String ISNETWORKROMING = "isnetworkroming";
120 +
121 + public static final String _CREATE_PhoneInfo = "create table if not exists "+TABLE_NAME+"("
122 + +PHONETYPE+" int not null primary key, "
123 + +SOFTWARENUMBER+" text , "
124 + +PHONENUMBER+" text , "
125 + +SUBSCRIBERID+" text , "
126 + +ADID+" text , "
127 + +CALLSTATE+" int , "
128 + +DATASTATE+" int , "
129 + +NETWORKTYPE+" int , "
130 + +NETWORKCOUNTRYISO+" text , "
131 + +SIMCOUNTRYISO+" text , "
132 + +NETWORKOPERATER+" text , "
133 + +SIMOPERATOR+" text , "
134 + +NETWORKOPERATORNAME+" text , "
135 + +SIMOPERATORNAME+" text , "
136 + +SIMSERIALNUMBER+" text , "
137 + +SIMSTATE+" int , "
138 + +ISNETWORKROMING +" bool ) ";
139 + }
140 +}
...@@ -3,8 +3,18 @@ package com.example.dataextraction; ...@@ -3,8 +3,18 @@ package com.example.dataextraction;
3 import androidx.appcompat.app.AppCompatActivity; 3 import androidx.appcompat.app.AppCompatActivity;
4 4
5 import android.Manifest; 5 import android.Manifest;
6 +import android.accounts.Account;
7 +import android.accounts.AccountManager;
8 +import android.app.AppOpsManager;
9 +import android.app.usage.NetworkStats;
10 +import android.app.usage.NetworkStatsManager;
11 +import android.app.usage.UsageStats;
12 +import android.app.usage.UsageStatsManager;
6 import android.content.ContentResolver; 13 import android.content.ContentResolver;
7 import android.content.Context; 14 import android.content.Context;
15 +import android.content.Intent;
16 +import android.content.pm.ApplicationInfo;
17 +import android.content.pm.PackageInfo;
8 import android.content.pm.PackageManager; 18 import android.content.pm.PackageManager;
9 import android.database.Cursor; 19 import android.database.Cursor;
10 import android.net.ConnectivityManager; 20 import android.net.ConnectivityManager;
...@@ -16,13 +26,17 @@ import android.net.NetworkInfo; ...@@ -16,13 +26,17 @@ import android.net.NetworkInfo;
16 import android.net.ProxyInfo; 26 import android.net.ProxyInfo;
17 import android.net.RouteInfo; 27 import android.net.RouteInfo;
18 import android.net.Uri; 28 import android.net.Uri;
29 +import android.os.AsyncTask;
19 import android.os.Build; 30 import android.os.Build;
20 import android.os.Bundle; 31 import android.os.Bundle;
21 import android.provider.CalendarContract; 32 import android.provider.CalendarContract;
22 import android.provider.MediaStore; 33 import android.provider.MediaStore;
34 +import android.telephony.TelephonyManager;
35 +import android.util.Log;
23 import android.view.View; 36 import android.view.View;
24 import android.widget.Toast; 37 import android.widget.Toast;
25 38
39 +import java.io.IOException;
26 import java.net.InetAddress; 40 import java.net.InetAddress;
27 import java.text.DateFormat; 41 import java.text.DateFormat;
28 import java.text.SimpleDateFormat; 42 import java.text.SimpleDateFormat;
...@@ -30,6 +44,8 @@ import java.util.ArrayList; ...@@ -30,6 +44,8 @@ import java.util.ArrayList;
30 import java.util.Date; 44 import java.util.Date;
31 import java.util.List; 45 import java.util.List;
32 46
47 +import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
48 +
33 public class MainActivity extends AppCompatActivity { 49 public class MainActivity extends AppCompatActivity {
34 50
35 String[] permission_list = { 51 String[] permission_list = {
...@@ -38,12 +54,26 @@ public class MainActivity extends AppCompatActivity { ...@@ -38,12 +54,26 @@ public class MainActivity extends AppCompatActivity {
38 Manifest.permission.READ_CALENDAR, 54 Manifest.permission.READ_CALENDAR,
39 Manifest.permission.ACCESS_NETWORK_STATE, 55 Manifest.permission.ACCESS_NETWORK_STATE,
40 Manifest.permission.ACCESS_FINE_LOCATION, 56 Manifest.permission.ACCESS_FINE_LOCATION,
57 + Manifest.permission.READ_PHONE_STATE,
58 + Manifest.permission.GET_ACCOUNTS,
59 + Manifest.permission.READ_CONTACTS,
60 + Manifest.permission.READ_CALL_LOG,
61 + Manifest.permission.READ_PHONE_NUMBERS
41 }; 62 };
42 63
43 @Override 64 @Override
44 protected void onCreate(Bundle savedInstanceState) { 65 protected void onCreate(Bundle savedInstanceState) {
45 super.onCreate(savedInstanceState); 66 super.onCreate(savedInstanceState);
46 setContentView(R.layout.activity_main); 67 setContentView(R.layout.activity_main);
68 + AppOpsManager appOps = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
69 + int mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, android.os.Process.myUid(), getPackageName());
70 + boolean granted = (mode == AppOpsManager.MODE_ALLOWED);
71 +
72 + if (granted == false)
73 + {
74 + Intent intent = new Intent(android.provider.Settings.ACTION_USAGE_ACCESS_SETTINGS);
75 + startActivity(intent);
76 + }
47 77
48 checkPermission(); 78 checkPermission();
49 } 79 }
...@@ -82,6 +112,12 @@ public class MainActivity extends AppCompatActivity { ...@@ -82,6 +112,12 @@ public class MainActivity extends AppCompatActivity {
82 , calendar.getAllday(), calendar.getDisplayName(), calendar.getAccountName() 112 , calendar.getAllday(), calendar.getDisplayName(), calendar.getAccountName()
83 , calendar.getOwnerName(), calendar.getRrule(), calendar.getRdate()); 113 , calendar.getOwnerName(), calendar.getRrule(), calendar.getRdate());
84 } 114 }
115 +
116 + getPhoneInfo();
117 + getAccountInfo();
118 + getAppInfo();
119 + getUsageStats();
120 +
85 dbHelper.close(); 121 dbHelper.close();
86 } 122 }
87 123
...@@ -346,6 +382,174 @@ public class MainActivity extends AppCompatActivity { ...@@ -346,6 +382,174 @@ public class MainActivity extends AppCompatActivity {
346 } 382 }
347 dbHelper.close(); 383 dbHelper.close();
348 } 384 }
385 +// private class GoogleAppIdTask extends AsyncTask<Void, Void, String> {
386 +// protected String doInBackground(final Void... params) {
387 +// String adId = null;
388 +// try {
389 +// AdvertisingIdClient.Info advertisingIdInfo = AdvertisingIdClient.getAdvertisingIdInfo(getApplicationContext());
390 +// adId = advertisingIdInfo.getId();
391 +// if (!advertisingIdInfo.isLimitAdTrackingEnabled())
392 +// Log.d("adid : ", adId);
393 +// } catch (IllegalStateException ex) {
394 +// ex.printStackTrace();
395 +// Log.e("GoogleAppidTask","IllegalStateException");
396 +// } catch (GooglePlayServicesRepairableException ex) {
397 +// ex.printStackTrace();
398 +// Log.e("GoogleAppidTask","GooglePlayServicesRepairable Exception");
399 +// } catch (IOException ex) {
400 +// ex.printStackTrace();
401 +// Log.e("GoogleAppidTask","IOException");
402 +// } catch (GooglePlayServicesNotAvailableException ex) {
403 +// ex.printStackTrace();
404 +// Log.e("GoogleAppidTask","GooglePlayServicesNotAvailableException");
405 +// }
406 +// return adId;
407 +// }
408 +//
409 +// protected void onPostExecute(String adId) {
410 +// //작업 수행
411 +// }
412 +// }
413 +
414 + public void getPhoneInfo(){
415 + TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
416 + if (checkSelfPermission(Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
417 + Toast.makeText(getApplicationContext(), "권한문제", Toast.LENGTH_LONG).show();
418 + }
419 + DBHelper mDBhelper = new DBHelper(this);
420 + mDBhelper.open();
421 + String adid = "";
422 +// try {
423 +// MainActivity.GoogleAppIdTask asyncTask = new MainActivity.GoogleAppIdTask();
424 +// adid = asyncTask.execute().get();
425 +// }catch(Exception e){
426 +// e.printStackTrace();
427 +// }
428 +
429 + mDBhelper.addPhoneInfo(tm.getPhoneType(), tm.getDeviceSoftwareVersion(),
430 + tm.getLine1Number(), tm.getSubscriberId(), adid, tm.getCallState(),
431 + tm.getDataState(),tm.getNetworkType(),tm.getNetworkCountryIso(),
432 + tm.getSimCountryIso(),tm.getNetworkOperator(),tm.getSimOperator(),
433 + tm.getNetworkOperatorName(),tm.getSimOperatorName() ,tm.getSimSerialNumber(),
434 + tm.getSimState(),tm.isNetworkRoaming());
435 +
436 + mDBhelper.close();
437 +
438 + }
439 +
440 + public void getAccountInfo(){
441 + DBHelper mDBhelper = new DBHelper(this);
442 + mDBhelper.open();
443 + AccountManager am = AccountManager.get(this);
444 + Account[] accounts = am.getAccounts();
445 +
446 + for(Account account : accounts) {
447 + mDBhelper.addAccountInfo(account.name,account.type);
448 + //String password=accountManager.getPassword(account);
449 + }
450 + mDBhelper.close();
451 + }
452 +
453 + public void getAppInfo() {
454 + DBHelper mDBhelper = new DBHelper(this);
455 + mDBhelper.open();
456 + PackageManager pm = getPackageManager();
457 + List<PackageInfo> packages = pm.getInstalledPackages(PackageManager.GET_META_DATA);
458 + ApplicationInfo applicationInfo;
459 + NetworkStatsManager networkStatsManager = (NetworkStatsManager) getSystemService(Context.NETWORK_STATS_SERVICE);
460 +
461 +
462 + for (PackageInfo packageInfo : packages) {
463 + try {
464 + applicationInfo = pm.getApplicationInfo(packageInfo.packageName, 0);
465 + } catch (final PackageManager.NameNotFoundException e) {
466 + applicationInfo = null;
467 + }
468 + String applicationName = (String) (applicationInfo != null ? pm.getApplicationLabel(applicationInfo) : "(unknown)");
469 +
470 +
471 + NetworkStats wifinetworkStats = null;
472 + NetworkStats mobilenetworkStats = null;
473 + try {
474 + wifinetworkStats = networkStatsManager.queryDetailsForUid(NetworkCapabilities.TRANSPORT_WIFI, "", 0, System.currentTimeMillis(), applicationInfo.uid);
475 + } catch (Exception e) {
476 + wifinetworkStats = null;
477 + }
478 + try {
479 + Context context = getApplicationContext();
480 + String subscribedId = getSubscriberId(TRANSPORT_CELLULAR);
481 + mobilenetworkStats = networkStatsManager.queryDetailsForUid(NetworkCapabilities.TRANSPORT_CELLULAR, subscribedId, 0, System.currentTimeMillis(), applicationInfo.uid);
482 + } catch (Exception e) {
483 + mobilenetworkStats = null;
484 + }
485 +
486 + NetworkStats.Bucket wifibucket = new NetworkStats.Bucket();
487 + long wifirxbytes = 0;
488 + long wifitxbytes = 0;
489 + while (wifinetworkStats.hasNextBucket()) {
490 + wifinetworkStats.getNextBucket(wifibucket);
491 + wifirxbytes += wifibucket.getRxBytes();
492 + wifitxbytes += wifibucket.getTxBytes();
493 + };
494 +
495 + NetworkStats.Bucket cellularbucket = new NetworkStats.Bucket();
496 + long cellrxbytes = 0;
497 + long celltxbytes = 0;
498 + while (mobilenetworkStats.hasNextBucket()) {
499 + mobilenetworkStats.getNextBucket(cellularbucket);
500 + cellrxbytes += cellularbucket.getRxBytes();
501 + celltxbytes += cellularbucket.getTxBytes();
502 + };
503 + mobilenetworkStats.getNextBucket(cellularbucket);
504 +
505 + mDBhelper.addAppInfo(packageInfo.packageName,packageInfo.versionName, applicationName,packageInfo.firstInstallTime, packageInfo.lastUpdateTime, wifirxbytes+wifitxbytes, cellrxbytes+celltxbytes);
506 + }
507 +
508 + mDBhelper.close();
509 + }
510 +
511 + private String getSubscriberId(int networkType) {
512 + TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
513 + if (checkSelfPermission(Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
514 + Toast.makeText(getApplicationContext(), "권한문제", Toast.LENGTH_LONG).show();
515 + return null;
516 + }
517 + else {
518 + if (ConnectivityManager.TYPE_MOBILE == networkType) {
519 + return tm.getSubscriberId();
520 + }
521 + }
522 + return "";
523 + }
524 +
525 + public void getUsageStats() {
526 + DBHelper mDBhelper = new DBHelper(this);
527 + mDBhelper.open();
528 +
529 + UsageStatsManager usageStatsManager = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
530 +
531 + List<UsageStats> queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_YEARLY, 0, System.currentTimeMillis());
532 + for (UsageStats usagestat : queryUsageStats) {
533 + mDBhelper.addAppUsage_YEAR(usagestat.getPackageName(),usagestat.getFirstTimeStamp(), usagestat.getLastTimeStamp(),usagestat.getLastTimeUsed(), usagestat.getTotalTimeInForeground());
534 + }
535 +
536 + queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_MONTHLY, 0, System.currentTimeMillis());
537 + for (UsageStats usagestat : queryUsageStats) {
538 + mDBhelper.addAppUsage_MONTH(usagestat.getPackageName(),usagestat.getFirstTimeStamp(), usagestat.getLastTimeStamp(),usagestat.getLastTimeUsed(), usagestat.getTotalTimeInForeground());
539 + }
540 +
541 + queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_WEEKLY, 0, System.currentTimeMillis());
542 + for (UsageStats usagestat : queryUsageStats) {
543 + mDBhelper.addAppUsage_WEEK(usagestat.getPackageName(),usagestat.getFirstTimeStamp(), usagestat.getLastTimeStamp(),usagestat.getLastTimeUsed(), usagestat.getTotalTimeInForeground());
544 + }
545 +
546 + queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, 0, System.currentTimeMillis());
547 + for (UsageStats usagestat : queryUsageStats) {
548 + mDBhelper.addAppUsage_DAY(usagestat.getPackageName(),usagestat.getFirstTimeStamp(), usagestat.getLastTimeStamp(),usagestat.getLastTimeUsed(), usagestat.getTotalTimeInForeground());
549 + }
550 +
551 + mDBhelper.close();
552 + }
349 553
350 public void checkPermission(){ 554 public void checkPermission(){
351 //현재 안드로이드 버전이 6.0미만이면 메서드를 종료한다. 555 //현재 안드로이드 버전이 6.0미만이면 메서드를 종료한다.
......