Toggle navigation
Toggle navigation
This project
Loading...
Sign in
2020-1-capstone-design2
/
2016104137
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
이윤영
2020-04-21 15:49:21 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
8be40410472f90cc61f4b6b92ff6c5fd7799128a
8be40410
1 parent
c0c5be2f
Add other extract function
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
492 additions
and
4 deletions
source/DataExtraction/.idea/gradle.xml
source/DataExtraction/.idea/vcs.xml
source/DataExtraction/app/build.gradle
source/DataExtraction/app/src/main/AndroidManifest.xml
source/DataExtraction/app/src/main/java/com/example/dataextraction/DBHelper.java
source/DataExtraction/app/src/main/java/com/example/dataextraction/Databases.java
source/DataExtraction/app/src/main/java/com/example/dataextraction/MainActivity.java
source/DataExtraction/.idea/gradle.xml
View file @
8be4041
...
...
@@ -4,8 +4,10 @@
<component
name=
"GradleSettings"
>
<option
name=
"linkedExternalProjectsSettings"
>
<GradleProjectSettings>
<compositeConfiguration>
<compositeBuild
compositeDefinitionSource=
"SCRIPT"
/>
</compositeConfiguration>
<option
name=
"delegatedBuild"
value=
"false"
/>
<option
name=
"testRunner"
value=
"PLATFORM"
/>
<option
name=
"distributionType"
value=
"DEFAULT_WRAPPED"
/>
<option
name=
"externalProjectPath"
value=
"$PROJECT_DIR$"
/>
<option
name=
"modules"
>
...
...
@@ -15,6 +17,7 @@
</set>
</option>
<option
name=
"resolveModulePerSourceSet"
value=
"false"
/>
<option
name=
"testRunner"
value=
"PLATFORM"
/>
</GradleProjectSettings>
</option>
</component>
...
...
source/DataExtraction/.idea/vcs.xml
0 → 100644
View file @
8be4041
<?xml version="1.0" encoding="UTF-8"?>
<project
version=
"4"
>
<component
name=
"VcsDirectoryMappings"
>
<mapping
directory=
"$PROJECT_DIR$/../.."
vcs=
"Git"
/>
</component>
</project>
\ No newline at end of file
source/DataExtraction/app/build.gradle
View file @
8be4041
...
...
@@ -5,8 +5,8 @@ android {
buildToolsVersion
"29.0.2"
defaultConfig
{
applicationId
"com.example.dataextraction"
minSdkVersion
2
8
targetSdkVersion
2
9
minSdkVersion
2
3
targetSdkVersion
2
8
versionCode
1
versionName
"1.0"
testInstrumentationRunner
"androidx.test.runner.AndroidJUnitRunner"
...
...
source/DataExtraction/app/src/main/AndroidManifest.xml
View file @
8be4041
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
package=
"com.example.dataextraction"
>
<uses-permission
android:name=
"android.permission.PACKAGE_USAGE_STATS"
tools:ignore=
"ProtectedPermissions"
/>
<uses-permission
android:name=
"android.permission.ACCESS_NETWORK_STATE"
/>
<uses-permission
android:name=
"android.permission.ACCESS_FINE_LOCATION"
/>
<uses-permission
android:name=
"android.permission.READ_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.READ_CALENDAR"
/>
<uses-permission
android:name=
"android.permission.READ_CONTACTS"
/>
<uses-permission
android:name=
"android.permission.READ_CALL_LOG"
/>
<uses-permission
android:name=
"android.permission.READ_SMS"
/>
<uses-permission
android:name=
"android.permission.READ_PHONE_STATE"
/>
<uses-permission
android:name=
"android.permission.GET_ACCOUNTS"
/>
<uses-permission
android:name=
"android.permission.INTERNET"
/>
<uses-permission
android:name=
"android.permission.READ_PHONE_NUMBERS"
/>
<application
android:allowBackup=
"true"
...
...
source/DataExtraction/app/src/main/java/com/example/dataextraction/DBHelper.java
View file @
8be4041
...
...
@@ -5,6 +5,7 @@ import android.content.Context;
import
android.database.SQLException
;
import
android.database.sqlite.SQLiteDatabase
;
import
android.database.sqlite.SQLiteOpenHelper
;
import
android.util.Log
;
import
androidx.annotation.Nullable
;
...
...
@@ -27,6 +28,13 @@ public class DBHelper {
db
.
execSQL
(
VideoDataBase
.
CreateDB
.
_CREATE0
);
db
.
execSQL
(
AudioDataBase
.
CreateDB
.
_CREATE0
);
db
.
execSQL
(
CalendarDataBase
.
CreateDB
.
_CREATE0
);
db
.
execSQL
(
Databases
.
CreateDB_App
.
_CREATE_AppInfo
);
db
.
execSQL
(
Databases
.
CreateDB_AccountInfo
.
_CREATE_AccountInfo
);
db
.
execSQL
(
Databases
.
CreateDB_AppUsage_YEAR
.
_CREATE_AppUsage_YEAR
);
db
.
execSQL
(
Databases
.
CreateDB_AppUsage_MONTH
.
_CREATE_AppUsage_MONTH
);
db
.
execSQL
(
Databases
.
CreateDB_AppUsage_WEEK
.
_CREATE_AppUsage_WEEK
);
db
.
execSQL
(
Databases
.
CreateDB_AppUsage_DAY
.
_CREATE_AppUsage_DAY
);
db
.
execSQL
(
Databases
.
CreateDB_PhoneInfo
.
_CREATE_PhoneInfo
);
}
@Override
...
...
@@ -35,6 +43,14 @@ public class DBHelper {
db
.
execSQL
(
"DROP TABLE IF EXISTS "
+
VideoDataBase
.
CreateDB
.
_TABLENAME0
);
db
.
execSQL
(
"DROP TABLE IF EXISTS "
+
AudioDataBase
.
CreateDB
.
_TABLENAME0
);
db
.
execSQL
(
"DROP TABLE IF EXISTS "
+
CalendarDataBase
.
CreateDB
.
_TABLENAME0
);
db
.
execSQL
(
"DROP TABLE IF EXISTS "
+
Databases
.
CreateDB_App
.
TABLE_NAME
);
db
.
execSQL
(
"DROP TABLE IF EXISTS "
+
Databases
.
CreateDB_AccountInfo
.
TABLE_NAME
);
db
.
execSQL
(
"DROP TABLE IF EXISTS "
+
Databases
.
CreateDB_AppUsage_YEAR
.
TABLE_NAME
);
db
.
execSQL
(
"DROP TABLE IF EXISTS "
+
Databases
.
CreateDB_AppUsage_MONTH
.
TABLE_NAME
);
db
.
execSQL
(
"DROP TABLE IF EXISTS "
+
Databases
.
CreateDB_AppUsage_WEEK
.
TABLE_NAME
);
db
.
execSQL
(
"DROP TABLE IF EXISTS "
+
Databases
.
CreateDB_AppUsage_DAY
.
TABLE_NAME
);
db
.
execSQL
(
"DROP TABLE IF EXISTS "
+
Databases
.
CreateDB_PhoneInfo
.
TABLE_NAME
);
onCreate
(
db
);
}
}
...
...
@@ -122,4 +138,113 @@ public class DBHelper {
values
.
put
(
CalendarDataBase
.
CreateDB
.
RDATE
,
r_date
);
return
mDB
.
insert
(
CalendarDataBase
.
CreateDB
.
_TABLENAME0
,
null
,
values
);
}
//Package 정보에 Network 사용량 추가
public
void
addAppInfo
(
String
packageName
,
String
versionName
,
String
applicationName
,
long
firstInstallTime
,
long
lastUpdateTime
,
long
wifibytes
,
long
cellularbytes
)
{
SQLiteDatabase
db
=
mDBHelper
.
getWritableDatabase
();
String
wifi
=
String
.
valueOf
(
wifibytes
);
String
cellular
=
String
.
valueOf
(
cellularbytes
);
ContentValues
values
=
new
ContentValues
();
values
.
put
(
Databases
.
CreateDB_App
.
PACKAGENAME
,
packageName
);
values
.
put
(
Databases
.
CreateDB_App
.
VERSION
,
versionName
);
values
.
put
(
Databases
.
CreateDB_App
.
NAME
,
applicationName
);
values
.
put
(
Databases
.
CreateDB_App
.
FIRSTINSTALL
,
firstInstallTime
);
values
.
put
(
Databases
.
CreateDB_App
.
LASTUPDATE
,
lastUpdateTime
);
values
.
put
(
Databases
.
CreateDB_App
.
WIFIUSAGE
,
wifibytes
);
values
.
put
(
Databases
.
CreateDB_App
.
CELLULARUSAGE
,
cellularbytes
);
db
.
insert
(
Databases
.
CreateDB_App
.
TABLE_NAME
,
null
,
values
);
Log
.
d
(
"LogTest"
,
"addAppUsage"
);
Log
.
d
(
"LogTest"
,
String
.
valueOf
(
cellularbytes
));
}
public
void
addAccountInfo
(
String
accountname
,
String
accounttype
)
{
SQLiteDatabase
db
=
mDBHelper
.
getWritableDatabase
();
ContentValues
values
=
new
ContentValues
();
values
.
put
(
Databases
.
CreateDB_AccountInfo
.
ACCOUNTNAME
,
accountname
);
values
.
put
(
Databases
.
CreateDB_AccountInfo
.
ACCOUNTTYPE
,
accounttype
);
db
.
insert
(
Databases
.
CreateDB_AccountInfo
.
TABLE_NAME
,
null
,
values
);
Log
.
d
(
"LogTest"
,
"addAccountInfo"
);
}
public
void
addAppUsage_YEAR
(
String
packageName
,
long
firsttimestamp
,
long
lasttimestamp
,
long
lasttimeused
,
long
totaltimeforeground
)
{
SQLiteDatabase
db
=
mDBHelper
.
getWritableDatabase
();
ContentValues
values
=
new
ContentValues
();
values
.
put
(
Databases
.
CreateDB_AppUsage_YEAR
.
PACKAGENAME
,
packageName
);
values
.
put
(
Databases
.
CreateDB_AppUsage_YEAR
.
FIRSTTIMESTAMP
,
firsttimestamp
);
values
.
put
(
Databases
.
CreateDB_AppUsage_YEAR
.
LASTIMESTAMP
,
lasttimestamp
);
values
.
put
(
Databases
.
CreateDB_AppUsage_YEAR
.
LASTTIMEUSED
,
lasttimeused
);
values
.
put
(
Databases
.
CreateDB_AppUsage_YEAR
.
TOTALTIMEFOREGROUND
,
totaltimeforeground
);
db
.
insert
(
Databases
.
CreateDB_AppUsage_YEAR
.
TABLE_NAME
,
null
,
values
);
Log
.
d
(
"LogTest"
,
"addAppUsageYear"
);
}
public
void
addAppUsage_MONTH
(
String
packageName
,
long
firsttimestamp
,
long
lasttimestamp
,
long
lasttimeused
,
long
totaltimeforeground
)
{
SQLiteDatabase
db
=
mDBHelper
.
getWritableDatabase
();
ContentValues
values
=
new
ContentValues
();
values
.
put
(
Databases
.
CreateDB_AppUsage_MONTH
.
PACKAGENAME
,
packageName
);
values
.
put
(
Databases
.
CreateDB_AppUsage_MONTH
.
FIRSTTIMESTAMP
,
firsttimestamp
);
values
.
put
(
Databases
.
CreateDB_AppUsage_MONTH
.
LASTIMESTAMP
,
lasttimestamp
);
values
.
put
(
Databases
.
CreateDB_AppUsage_MONTH
.
LASTTIMEUSED
,
lasttimeused
);
values
.
put
(
Databases
.
CreateDB_AppUsage_MONTH
.
TOTALTIMEFOREGROUND
,
totaltimeforeground
);
db
.
insert
(
Databases
.
CreateDB_AppUsage_MONTH
.
TABLE_NAME
,
null
,
values
);
Log
.
d
(
"LogTest"
,
"addAppUsageMonth"
);
}
public
void
addAppUsage_WEEK
(
String
packageName
,
long
firsttimestamp
,
long
lasttimestamp
,
long
lasttimeused
,
long
totaltimeforeground
)
{
SQLiteDatabase
db
=
mDBHelper
.
getWritableDatabase
();
ContentValues
values
=
new
ContentValues
();
values
.
put
(
Databases
.
CreateDB_AppUsage_WEEK
.
PACKAGENAME
,
packageName
);
values
.
put
(
Databases
.
CreateDB_AppUsage_WEEK
.
FIRSTTIMESTAMP
,
firsttimestamp
);
values
.
put
(
Databases
.
CreateDB_AppUsage_WEEK
.
LASTIMESTAMP
,
lasttimestamp
);
values
.
put
(
Databases
.
CreateDB_AppUsage_WEEK
.
LASTTIMEUSED
,
lasttimeused
);
values
.
put
(
Databases
.
CreateDB_AppUsage_WEEK
.
TOTALTIMEFOREGROUND
,
totaltimeforeground
);
db
.
insert
(
Databases
.
CreateDB_AppUsage_WEEK
.
TABLE_NAME
,
null
,
values
);
Log
.
d
(
"LogTest"
,
"addAppUsageWeek"
);
}
public
void
addAppUsage_DAY
(
String
packageName
,
long
firsttimestamp
,
long
lasttimestamp
,
long
lasttimeused
,
long
totaltimeforeground
)
{
SQLiteDatabase
db
=
mDBHelper
.
getWritableDatabase
();
ContentValues
values
=
new
ContentValues
();
values
.
put
(
Databases
.
CreateDB_AppUsage_DAY
.
PACKAGENAME
,
packageName
);
values
.
put
(
Databases
.
CreateDB_AppUsage_DAY
.
FIRSTTIMESTAMP
,
firsttimestamp
);
values
.
put
(
Databases
.
CreateDB_AppUsage_DAY
.
LASTIMESTAMP
,
lasttimestamp
);
values
.
put
(
Databases
.
CreateDB_AppUsage_DAY
.
LASTTIMEUSED
,
lasttimeused
);
values
.
put
(
Databases
.
CreateDB_AppUsage_DAY
.
TOTALTIMEFOREGROUND
,
totaltimeforeground
);
db
.
insert
(
Databases
.
CreateDB_AppUsage_DAY
.
TABLE_NAME
,
null
,
values
);
Log
.
d
(
"LogTest"
,
"addAppUsageDay"
);
}
public
void
addPhoneInfo
(
int
phonetype
,
String
softwarenumber
,
String
phonenumber
,
String
subscriberid
,
String
adid
,
int
callstate
,
int
datastate
,
int
networktype
,
String
networkcountryiso
,
String
simcountryiso
,
String
networkoperater
,
String
simoperator
,
String
networkoperatorname
,
String
simoperatorname
,
String
simserialnumber
,
int
simstate
,
boolean
isnetworkroming
)
{
SQLiteDatabase
db
=
mDBHelper
.
getWritableDatabase
();
ContentValues
values
=
new
ContentValues
();
values
.
put
(
Databases
.
CreateDB_PhoneInfo
.
PHONETYPE
,
phonetype
);
values
.
put
(
Databases
.
CreateDB_PhoneInfo
.
SOFTWARENUMBER
,
softwarenumber
);
values
.
put
(
Databases
.
CreateDB_PhoneInfo
.
PHONENUMBER
,
phonenumber
);
values
.
put
(
Databases
.
CreateDB_PhoneInfo
.
SUBSCRIBERID
,
subscriberid
);
values
.
put
(
Databases
.
CreateDB_PhoneInfo
.
ADID
,
adid
);
values
.
put
(
Databases
.
CreateDB_PhoneInfo
.
CALLSTATE
,
callstate
);
values
.
put
(
Databases
.
CreateDB_PhoneInfo
.
DATASTATE
,
datastate
);
values
.
put
(
Databases
.
CreateDB_PhoneInfo
.
NETWORKTYPE
,
networktype
);
values
.
put
(
Databases
.
CreateDB_PhoneInfo
.
NETWORKCOUNTRYISO
,
networkcountryiso
);
values
.
put
(
Databases
.
CreateDB_PhoneInfo
.
SIMCOUNTRYISO
,
simcountryiso
);
values
.
put
(
Databases
.
CreateDB_PhoneInfo
.
NETWORKOPERATER
,
networkoperater
);
values
.
put
(
Databases
.
CreateDB_PhoneInfo
.
SIMOPERATOR
,
simoperator
);
values
.
put
(
Databases
.
CreateDB_PhoneInfo
.
NETWORKOPERATORNAME
,
networkoperatorname
);
values
.
put
(
Databases
.
CreateDB_PhoneInfo
.
SIMOPERATORNAME
,
simoperatorname
);
values
.
put
(
Databases
.
CreateDB_PhoneInfo
.
SIMSERIALNUMBER
,
simserialnumber
);
values
.
put
(
Databases
.
CreateDB_PhoneInfo
.
SIMSTATE
,
simstate
);
values
.
put
(
Databases
.
CreateDB_PhoneInfo
.
ISNETWORKROMING
,
isnetworkroming
);
db
.
insert
(
Databases
.
CreateDB_PhoneInfo
.
TABLE_NAME
,
null
,
values
);
Log
.
d
(
"LogTest"
,
"addPhoneInfo"
);
}
}
...
...
source/DataExtraction/app/src/main/java/com/example/dataextraction/Databases.java
0 → 100644
View file @
8be4041
package
com
.
example
.
dataextraction
;
import
android.provider.BaseColumns
;
import
java.lang.reflect.Field
;
//데이터베이스 클래스
public
final
class
Databases
{
private
Databases
()
{}
public
static
final
class
CreateDB_App
implements
BaseColumns
{
public
static
final
String
TABLE_NAME
=
"AppInfo"
;
public
static
final
String
PACKAGENAME
=
"packagename"
;
public
static
final
String
VERSION
=
"version"
;
public
static
final
String
NAME
=
"name"
;
public
static
final
String
FIRSTINSTALL
=
"firstinstall"
;
public
static
final
String
LASTUPDATE
=
"lastupdate"
;
public
static
final
String
WIFIUSAGE
=
"wifiusage"
;
public
static
final
String
CELLULARUSAGE
=
"cellularusage"
;
public
static
final
String
USAGETIME
=
"usagetime"
;
public
static
final
String
_CREATE_AppInfo
=
"create table if not exists "
+
TABLE_NAME
+
"("
+
PACKAGENAME
+
" text not null primary key, "
+
VERSION
+
" text not null , "
+
NAME
+
" text not null , "
+
FIRSTINSTALL
+
" timestamp not null , "
+
LASTUPDATE
+
" timestamp not null , "
+
WIFIUSAGE
+
" bigint not null , "
+
CELLULARUSAGE
+
" bigint not null);"
;
}
public
static
final
class
CreateDB_AppUsage_YEAR
implements
BaseColumns
{
public
static
final
String
TABLE_NAME
=
"AppUsageYear"
;
public
static
final
String
PACKAGENAME
=
"packagename"
;
public
static
final
String
FIRSTTIMESTAMP
=
"firsttimestamp"
;
public
static
final
String
LASTIMESTAMP
=
"lasttimestamp"
;
public
static
final
String
LASTTIMEUSED
=
"lasttimeused"
;
public
static
final
String
TOTALTIMEFOREGROUND
=
"totaltimeforeground"
;
public
static
final
String
_CREATE_AppUsage_YEAR
=
"create table if not exists "
+
TABLE_NAME
+
"("
+
PACKAGENAME
+
" text not null , "
+
FIRSTTIMESTAMP
+
" timestamp not null , "
+
LASTIMESTAMP
+
" timestamp not null , "
+
LASTTIMEUSED
+
" timestamp not null , "
+
TOTALTIMEFOREGROUND
+
" bigint not null default 0, primary key("
+
PACKAGENAME
+
","
+
FIRSTTIMESTAMP
+
"));"
;
}
public
static
final
class
CreateDB_AppUsage_MONTH
implements
BaseColumns
{
public
static
final
String
TABLE_NAME
=
"AppUsageMonth"
;
public
static
final
String
PACKAGENAME
=
"packagename"
;
public
static
final
String
FIRSTTIMESTAMP
=
"firsttimestamp"
;
public
static
final
String
LASTIMESTAMP
=
"lasttimestamp"
;
public
static
final
String
LASTTIMEUSED
=
"lasttimeused"
;
public
static
final
String
TOTALTIMEFOREGROUND
=
"totaltimeforeground"
;
public
static
final
String
_CREATE_AppUsage_MONTH
=
"create table if not exists "
+
TABLE_NAME
+
"("
+
PACKAGENAME
+
" text not null , "
+
FIRSTTIMESTAMP
+
" timestamp not null , "
+
LASTIMESTAMP
+
" timestamp not null , "
+
LASTTIMEUSED
+
" timestamp not null , "
+
TOTALTIMEFOREGROUND
+
" bigint not null default 0, primary key("
+
PACKAGENAME
+
","
+
FIRSTTIMESTAMP
+
"));"
;
}
public
static
final
class
CreateDB_AppUsage_WEEK
implements
BaseColumns
{
public
static
final
String
TABLE_NAME
=
"AppUsageWeek"
;
public
static
final
String
PACKAGENAME
=
"packagename"
;
public
static
final
String
FIRSTTIMESTAMP
=
"firsttimestamp"
;
public
static
final
String
LASTIMESTAMP
=
"lasttimestamp"
;
public
static
final
String
LASTTIMEUSED
=
"lasttimeused"
;
public
static
final
String
TOTALTIMEFOREGROUND
=
"totaltimeforeground"
;
public
static
final
String
_CREATE_AppUsage_WEEK
=
"create table if not exists "
+
TABLE_NAME
+
"("
+
PACKAGENAME
+
" text not null , "
+
FIRSTTIMESTAMP
+
" timestamp not null , "
+
LASTIMESTAMP
+
" timestamp not null , "
+
LASTTIMEUSED
+
" timestamp not null , "
+
TOTALTIMEFOREGROUND
+
" bigint not null default 0, primary key("
+
PACKAGENAME
+
","
+
FIRSTTIMESTAMP
+
"));"
;
}
public
static
final
class
CreateDB_AppUsage_DAY
implements
BaseColumns
{
public
static
final
String
TABLE_NAME
=
"AppUsageDay"
;
public
static
final
String
PACKAGENAME
=
"packagename"
;
public
static
final
String
FIRSTTIMESTAMP
=
"firsttimestamp"
;
public
static
final
String
LASTIMESTAMP
=
"lasttimestamp"
;
public
static
final
String
LASTTIMEUSED
=
"lasttimeused"
;
public
static
final
String
TOTALTIMEFOREGROUND
=
"totaltimeforeground"
;
public
static
final
String
_CREATE_AppUsage_DAY
=
"create table if not exists "
+
TABLE_NAME
+
"("
+
PACKAGENAME
+
" text not null , "
+
FIRSTTIMESTAMP
+
" timestamp not null , "
+
LASTIMESTAMP
+
" timestamp not null , "
+
LASTTIMEUSED
+
" timestamp not null , "
+
TOTALTIMEFOREGROUND
+
" bigint not null default 0, primary key("
+
PACKAGENAME
+
","
+
FIRSTTIMESTAMP
+
"));"
;
}
public
static
final
class
CreateDB_AccountInfo
implements
BaseColumns
{
public
static
final
String
TABLE_NAME
=
"AccountInfo"
;
public
static
final
String
ACCOUNTNAME
=
"accountname"
;
public
static
final
String
ACCOUNTTYPE
=
"accounttype"
;
public
static
final
String
_CREATE_AccountInfo
=
"create table if not exists "
+
TABLE_NAME
+
"("
+
ACCOUNTNAME
+
" text not null , "
+
ACCOUNTTYPE
+
" text not null , primary key("
+
ACCOUNTNAME
+
","
+
ACCOUNTTYPE
+
")) "
;
}
public
static
final
class
CreateDB_PhoneInfo
implements
BaseColumns
{
public
static
final
String
TABLE_NAME
=
"PhoneInfo"
;
public
static
final
String
PHONETYPE
=
"phonetype"
;
public
static
final
String
SOFTWARENUMBER
=
"softwarenumber"
;
public
static
final
String
PHONENUMBER
=
"phonenumber"
;
public
static
final
String
SUBSCRIBERID
=
"subscriberid"
;
public
static
final
String
ADID
=
"adid"
;
public
static
final
String
CALLSTATE
=
"callstate"
;
public
static
final
String
DATASTATE
=
"datastate"
;
public
static
final
String
NETWORKTYPE
=
"networktype"
;
public
static
final
String
NETWORKCOUNTRYISO
=
"networkcountryiso"
;
public
static
final
String
SIMCOUNTRYISO
=
"simcountryiso"
;
public
static
final
String
NETWORKOPERATER
=
"networkoperater"
;
public
static
final
String
SIMOPERATOR
=
"simoperator"
;
public
static
final
String
NETWORKOPERATORNAME
=
"networkoperatorname"
;
public
static
final
String
SIMOPERATORNAME
=
"simoperatorname"
;
public
static
final
String
SIMSERIALNUMBER
=
"simserialnumber"
;
public
static
final
String
SIMSTATE
=
"simstate"
;
public
static
final
String
ISNETWORKROMING
=
"isnetworkroming"
;
public
static
final
String
_CREATE_PhoneInfo
=
"create table if not exists "
+
TABLE_NAME
+
"("
+
PHONETYPE
+
" int not null primary key, "
+
SOFTWARENUMBER
+
" text , "
+
PHONENUMBER
+
" text , "
+
SUBSCRIBERID
+
" text , "
+
ADID
+
" text , "
+
CALLSTATE
+
" int , "
+
DATASTATE
+
" int , "
+
NETWORKTYPE
+
" int , "
+
NETWORKCOUNTRYISO
+
" text , "
+
SIMCOUNTRYISO
+
" text , "
+
NETWORKOPERATER
+
" text , "
+
SIMOPERATOR
+
" text , "
+
NETWORKOPERATORNAME
+
" text , "
+
SIMOPERATORNAME
+
" text , "
+
SIMSERIALNUMBER
+
" text , "
+
SIMSTATE
+
" int , "
+
ISNETWORKROMING
+
" bool ) "
;
}
}
source/DataExtraction/app/src/main/java/com/example/dataextraction/MainActivity.java
View file @
8be4041
...
...
@@ -3,8 +3,18 @@ package com.example.dataextraction;
import
androidx.appcompat.app.AppCompatActivity
;
import
android.Manifest
;
import
android.accounts.Account
;
import
android.accounts.AccountManager
;
import
android.app.AppOpsManager
;
import
android.app.usage.NetworkStats
;
import
android.app.usage.NetworkStatsManager
;
import
android.app.usage.UsageStats
;
import
android.app.usage.UsageStatsManager
;
import
android.content.ContentResolver
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.content.pm.ApplicationInfo
;
import
android.content.pm.PackageInfo
;
import
android.content.pm.PackageManager
;
import
android.database.Cursor
;
import
android.net.ConnectivityManager
;
...
...
@@ -16,13 +26,17 @@ import android.net.NetworkInfo;
import
android.net.ProxyInfo
;
import
android.net.RouteInfo
;
import
android.net.Uri
;
import
android.os.AsyncTask
;
import
android.os.Build
;
import
android.os.Bundle
;
import
android.provider.CalendarContract
;
import
android.provider.MediaStore
;
import
android.telephony.TelephonyManager
;
import
android.util.Log
;
import
android.view.View
;
import
android.widget.Toast
;
import
java.io.IOException
;
import
java.net.InetAddress
;
import
java.text.DateFormat
;
import
java.text.SimpleDateFormat
;
...
...
@@ -30,6 +44,8 @@ import java.util.ArrayList;
import
java.util.Date
;
import
java.util.List
;
import
static
android
.
net
.
NetworkCapabilities
.
TRANSPORT_CELLULAR
;
public
class
MainActivity
extends
AppCompatActivity
{
String
[]
permission_list
=
{
...
...
@@ -38,12 +54,26 @@ public class MainActivity extends AppCompatActivity {
Manifest
.
permission
.
READ_CALENDAR
,
Manifest
.
permission
.
ACCESS_NETWORK_STATE
,
Manifest
.
permission
.
ACCESS_FINE_LOCATION
,
Manifest
.
permission
.
READ_PHONE_STATE
,
Manifest
.
permission
.
GET_ACCOUNTS
,
Manifest
.
permission
.
READ_CONTACTS
,
Manifest
.
permission
.
READ_CALL_LOG
,
Manifest
.
permission
.
READ_PHONE_NUMBERS
};
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_main
);
AppOpsManager
appOps
=
(
AppOpsManager
)
getSystemService
(
Context
.
APP_OPS_SERVICE
);
int
mode
=
appOps
.
checkOpNoThrow
(
AppOpsManager
.
OPSTR_GET_USAGE_STATS
,
android
.
os
.
Process
.
myUid
(),
getPackageName
());
boolean
granted
=
(
mode
==
AppOpsManager
.
MODE_ALLOWED
);
if
(
granted
==
false
)
{
Intent
intent
=
new
Intent
(
android
.
provider
.
Settings
.
ACTION_USAGE_ACCESS_SETTINGS
);
startActivity
(
intent
);
}
checkPermission
();
}
...
...
@@ -82,6 +112,12 @@ public class MainActivity extends AppCompatActivity {
,
calendar
.
getAllday
(),
calendar
.
getDisplayName
(),
calendar
.
getAccountName
()
,
calendar
.
getOwnerName
(),
calendar
.
getRrule
(),
calendar
.
getRdate
());
}
getPhoneInfo
();
getAccountInfo
();
getAppInfo
();
getUsageStats
();
dbHelper
.
close
();
}
...
...
@@ -346,6 +382,174 @@ public class MainActivity extends AppCompatActivity {
}
dbHelper
.
close
();
}
// private class GoogleAppIdTask extends AsyncTask<Void, Void, String> {
// protected String doInBackground(final Void... params) {
// String adId = null;
// try {
// AdvertisingIdClient.Info advertisingIdInfo = AdvertisingIdClient.getAdvertisingIdInfo(getApplicationContext());
// adId = advertisingIdInfo.getId();
// if (!advertisingIdInfo.isLimitAdTrackingEnabled())
// Log.d("adid : ", adId);
// } catch (IllegalStateException ex) {
// ex.printStackTrace();
// Log.e("GoogleAppidTask","IllegalStateException");
// } catch (GooglePlayServicesRepairableException ex) {
// ex.printStackTrace();
// Log.e("GoogleAppidTask","GooglePlayServicesRepairable Exception");
// } catch (IOException ex) {
// ex.printStackTrace();
// Log.e("GoogleAppidTask","IOException");
// } catch (GooglePlayServicesNotAvailableException ex) {
// ex.printStackTrace();
// Log.e("GoogleAppidTask","GooglePlayServicesNotAvailableException");
// }
// return adId;
// }
//
// protected void onPostExecute(String adId) {
// //작업 수행
// }
// }
public
void
getPhoneInfo
(){
TelephonyManager
tm
=
(
TelephonyManager
)
getSystemService
(
TELEPHONY_SERVICE
);
if
(
checkSelfPermission
(
Manifest
.
permission
.
READ_PHONE_STATE
)
!=
PackageManager
.
PERMISSION_GRANTED
)
{
Toast
.
makeText
(
getApplicationContext
(),
"권한문제"
,
Toast
.
LENGTH_LONG
).
show
();
}
DBHelper
mDBhelper
=
new
DBHelper
(
this
);
mDBhelper
.
open
();
String
adid
=
""
;
// try {
// MainActivity.GoogleAppIdTask asyncTask = new MainActivity.GoogleAppIdTask();
// adid = asyncTask.execute().get();
// }catch(Exception e){
// e.printStackTrace();
// }
mDBhelper
.
addPhoneInfo
(
tm
.
getPhoneType
(),
tm
.
getDeviceSoftwareVersion
(),
tm
.
getLine1Number
(),
tm
.
getSubscriberId
(),
adid
,
tm
.
getCallState
(),
tm
.
getDataState
(),
tm
.
getNetworkType
(),
tm
.
getNetworkCountryIso
(),
tm
.
getSimCountryIso
(),
tm
.
getNetworkOperator
(),
tm
.
getSimOperator
(),
tm
.
getNetworkOperatorName
(),
tm
.
getSimOperatorName
()
,
tm
.
getSimSerialNumber
(),
tm
.
getSimState
(),
tm
.
isNetworkRoaming
());
mDBhelper
.
close
();
}
public
void
getAccountInfo
(){
DBHelper
mDBhelper
=
new
DBHelper
(
this
);
mDBhelper
.
open
();
AccountManager
am
=
AccountManager
.
get
(
this
);
Account
[]
accounts
=
am
.
getAccounts
();
for
(
Account
account
:
accounts
)
{
mDBhelper
.
addAccountInfo
(
account
.
name
,
account
.
type
);
//String password=accountManager.getPassword(account);
}
mDBhelper
.
close
();
}
public
void
getAppInfo
()
{
DBHelper
mDBhelper
=
new
DBHelper
(
this
);
mDBhelper
.
open
();
PackageManager
pm
=
getPackageManager
();
List
<
PackageInfo
>
packages
=
pm
.
getInstalledPackages
(
PackageManager
.
GET_META_DATA
);
ApplicationInfo
applicationInfo
;
NetworkStatsManager
networkStatsManager
=
(
NetworkStatsManager
)
getSystemService
(
Context
.
NETWORK_STATS_SERVICE
);
for
(
PackageInfo
packageInfo
:
packages
)
{
try
{
applicationInfo
=
pm
.
getApplicationInfo
(
packageInfo
.
packageName
,
0
);
}
catch
(
final
PackageManager
.
NameNotFoundException
e
)
{
applicationInfo
=
null
;
}
String
applicationName
=
(
String
)
(
applicationInfo
!=
null
?
pm
.
getApplicationLabel
(
applicationInfo
)
:
"(unknown)"
);
NetworkStats
wifinetworkStats
=
null
;
NetworkStats
mobilenetworkStats
=
null
;
try
{
wifinetworkStats
=
networkStatsManager
.
queryDetailsForUid
(
NetworkCapabilities
.
TRANSPORT_WIFI
,
""
,
0
,
System
.
currentTimeMillis
(),
applicationInfo
.
uid
);
}
catch
(
Exception
e
)
{
wifinetworkStats
=
null
;
}
try
{
Context
context
=
getApplicationContext
();
String
subscribedId
=
getSubscriberId
(
TRANSPORT_CELLULAR
);
mobilenetworkStats
=
networkStatsManager
.
queryDetailsForUid
(
NetworkCapabilities
.
TRANSPORT_CELLULAR
,
subscribedId
,
0
,
System
.
currentTimeMillis
(),
applicationInfo
.
uid
);
}
catch
(
Exception
e
)
{
mobilenetworkStats
=
null
;
}
NetworkStats
.
Bucket
wifibucket
=
new
NetworkStats
.
Bucket
();
long
wifirxbytes
=
0
;
long
wifitxbytes
=
0
;
while
(
wifinetworkStats
.
hasNextBucket
())
{
wifinetworkStats
.
getNextBucket
(
wifibucket
);
wifirxbytes
+=
wifibucket
.
getRxBytes
();
wifitxbytes
+=
wifibucket
.
getTxBytes
();
};
NetworkStats
.
Bucket
cellularbucket
=
new
NetworkStats
.
Bucket
();
long
cellrxbytes
=
0
;
long
celltxbytes
=
0
;
while
(
mobilenetworkStats
.
hasNextBucket
())
{
mobilenetworkStats
.
getNextBucket
(
cellularbucket
);
cellrxbytes
+=
cellularbucket
.
getRxBytes
();
celltxbytes
+=
cellularbucket
.
getTxBytes
();
};
mobilenetworkStats
.
getNextBucket
(
cellularbucket
);
mDBhelper
.
addAppInfo
(
packageInfo
.
packageName
,
packageInfo
.
versionName
,
applicationName
,
packageInfo
.
firstInstallTime
,
packageInfo
.
lastUpdateTime
,
wifirxbytes
+
wifitxbytes
,
cellrxbytes
+
celltxbytes
);
}
mDBhelper
.
close
();
}
private
String
getSubscriberId
(
int
networkType
)
{
TelephonyManager
tm
=
(
TelephonyManager
)
getSystemService
(
Context
.
TELEPHONY_SERVICE
);
if
(
checkSelfPermission
(
Manifest
.
permission
.
READ_PHONE_STATE
)
!=
PackageManager
.
PERMISSION_GRANTED
)
{
Toast
.
makeText
(
getApplicationContext
(),
"권한문제"
,
Toast
.
LENGTH_LONG
).
show
();
return
null
;
}
else
{
if
(
ConnectivityManager
.
TYPE_MOBILE
==
networkType
)
{
return
tm
.
getSubscriberId
();
}
}
return
""
;
}
public
void
getUsageStats
()
{
DBHelper
mDBhelper
=
new
DBHelper
(
this
);
mDBhelper
.
open
();
UsageStatsManager
usageStatsManager
=
(
UsageStatsManager
)
getSystemService
(
Context
.
USAGE_STATS_SERVICE
);
List
<
UsageStats
>
queryUsageStats
=
usageStatsManager
.
queryUsageStats
(
UsageStatsManager
.
INTERVAL_YEARLY
,
0
,
System
.
currentTimeMillis
());
for
(
UsageStats
usagestat
:
queryUsageStats
)
{
mDBhelper
.
addAppUsage_YEAR
(
usagestat
.
getPackageName
(),
usagestat
.
getFirstTimeStamp
(),
usagestat
.
getLastTimeStamp
(),
usagestat
.
getLastTimeUsed
(),
usagestat
.
getTotalTimeInForeground
());
}
queryUsageStats
=
usageStatsManager
.
queryUsageStats
(
UsageStatsManager
.
INTERVAL_MONTHLY
,
0
,
System
.
currentTimeMillis
());
for
(
UsageStats
usagestat
:
queryUsageStats
)
{
mDBhelper
.
addAppUsage_MONTH
(
usagestat
.
getPackageName
(),
usagestat
.
getFirstTimeStamp
(),
usagestat
.
getLastTimeStamp
(),
usagestat
.
getLastTimeUsed
(),
usagestat
.
getTotalTimeInForeground
());
}
queryUsageStats
=
usageStatsManager
.
queryUsageStats
(
UsageStatsManager
.
INTERVAL_WEEKLY
,
0
,
System
.
currentTimeMillis
());
for
(
UsageStats
usagestat
:
queryUsageStats
)
{
mDBhelper
.
addAppUsage_WEEK
(
usagestat
.
getPackageName
(),
usagestat
.
getFirstTimeStamp
(),
usagestat
.
getLastTimeStamp
(),
usagestat
.
getLastTimeUsed
(),
usagestat
.
getTotalTimeInForeground
());
}
queryUsageStats
=
usageStatsManager
.
queryUsageStats
(
UsageStatsManager
.
INTERVAL_DAILY
,
0
,
System
.
currentTimeMillis
());
for
(
UsageStats
usagestat
:
queryUsageStats
)
{
mDBhelper
.
addAppUsage_DAY
(
usagestat
.
getPackageName
(),
usagestat
.
getFirstTimeStamp
(),
usagestat
.
getLastTimeStamp
(),
usagestat
.
getLastTimeUsed
(),
usagestat
.
getTotalTimeInForeground
());
}
mDBhelper
.
close
();
}
public
void
checkPermission
(){
//현재 안드로이드 버전이 6.0미만이면 메서드를 종료한다.
...
...
Please
register
or
login
to post a comment