Android手机用户隐私获取,包括读取通讯录、读取通话记录、读取浏览器历史记录、读取手机短信
16lz
2021-01-23
Android手机用户隐私获取,包括读取通讯录、读取通话记录、读取浏览器历史记录、读取手机短信
MainActivity.class
package com.example.privateinformation;import android.app.Activity;import android.os.Bundle;import android.util.Log;import com.githang.statusbar.StatusBarCompat;import java.util.ArrayList;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); StatusBarCompat.setStatusBarColor(this, getResources().getColor(R.color.home_fill), false); PrivateDataCatch dc = new PrivateDataCatch(getApplicationContext()); //获取通讯录 ArrayListphoneContacts = dc.getPhoneContacts(); Log.e("Length phoneContacts", "联系人个数:" + phoneContacts.size()); for (int i = 0; i < phoneContacts.size(); i++) { Log.i("phoneContacts",phoneContacts.get(i)); } ArrayList simContacts = dc.getSIMContacts(); Log.e("Length simContacts",":"+simContacts.size()); for(int i=0;i ;i++){ Log.i("simContacts",simContacts.get(i)); } ArrayList callLogs = dc.getCallLogs(); //获取通话记录 Log.e("Length callLogs", "通话记录条数:" + callLogs.size()); for (int i = 0; i < callLogs.size(); i++) { Log.i("callLogs", callLogs.get(i)); } ArrayList browserHistory = dc.getBrowserHistory(); Log.e("Length browserHistory",""+browserHistory.size()); for(int i=0;i ;i++){ Log.i("browserHistory",browserHistory.get(i)); } //获取短信 ArrayList smsInPhone = dc.getSmsInPhones(); Log.e("Length smsInPhone", "短信条数:" + smsInPhone.size()); for (int i = 0; i < smsInPhone.size(); i++) { Log.i("smsInPhone", smsInPhone.get(i)); } }}
Privateinformation.class
package com.example.privateinformation;import android.annotation.SuppressLint;import android.content.ContentResolver;import android.content.Context;import android.database.Cursor;import android.net.Uri;import android.provider.CallLog;import android.provider.ContactsContract.CommonDataKinds.Phone;import android.text.TextUtils;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;public class PrivateDataCatch { public String[] cltype = {"已接电话","已接电话","已拨电话","未接来电"}; public String[] smstype = {"接收的","接收的","发送的","发送的"}; private Context mContext; public PrivateDataCatch(Context mContext){ this.mContext = mContext; } /** * 获取手机通讯录 包括name(名称)和phoneNumber(号码)以;分隔 * @return */ public ArrayListgetPhoneContacts(){ ArrayList contacts = new ArrayList (); try{ ContentResolver resolver = mContext.getContentResolver(); Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,null, null, null, null); if(phoneCursor!=null){ while(phoneCursor.moveToNext()){ int nameIndex = phoneCursor.getColumnIndex(Phone.DISPLAY_NAME); String name = phoneCursor.getString(nameIndex); String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(Phone.NUMBER)); if(TextUtils.isEmpty(phoneNumber)){ continue; } contacts.add(name+";"+phoneNumber); } phoneCursor.close(); } }catch(Exception e){ e.printStackTrace(); } return contacts; } /** * 获取SIM卡通讯录 包括name(名称)和phoneNumber(号码)以;分隔 * @return */ public ArrayList getSIMContacts(){ ArrayList contacts = new ArrayList (); try{ ContentResolver resolver = mContext.getContentResolver(); Uri uri = Uri.parse("content://icc/adn"); Cursor phoneCursor = resolver.query(uri, null, null, null, null); if(phoneCursor!=null){ while(phoneCursor.moveToNext()){ String name = phoneCursor.getString(phoneCursor.getColumnIndex("name")); String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex("number")); if(TextUtils.isEmpty(phoneNumber)){ continue; } contacts.add(name+";"+phoneNumber); } phoneCursor.close(); } }catch(Exception e){ e.printStackTrace(); } return contacts; } /** * 获取通话记录 包括type date cachedName number * @return */ @SuppressLint("SimpleDateFormat") public ArrayList getCallLogs(){ ArrayList callLogs = new ArrayList (); String[] projection = { CallLog.Calls.DATE, // 日期 CallLog.Calls.NUMBER, // 号码 CallLog.Calls.TYPE, // 类型 CallLog.Calls.CACHED_NAME, // 名字 }; SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss"); Date date; try{ ContentResolver cr = mContext.getContentResolver(); Cursor cursor = cr.query(CallLog.Calls.CONTENT_URI, projection, null, null, CallLog.Calls.DEFAULT_SORT_ORDER); if (cursor != null && cursor.getCount() > 0){ cursor.moveToFirst(); while(cursor.moveToNext()){ date = new Date(cursor.getLong(cursor .getColumnIndex(CallLog.Calls.DATE))); String number = cursor.getString(cursor .getColumnIndex(CallLog.Calls.NUMBER)); int type = cursor.getInt(cursor .getColumnIndex(CallLog.Calls.TYPE)); String cachedName = cursor.getString(cursor .getColumnIndex(CallLog.Calls.CACHED_NAME)); String callLog = cltype[type]+";"+sfd.format(date)+";"+cachedName+";"+number; callLogs.add(callLog); } cursor.close(); } }catch(Exception e){ e.printStackTrace(); } return callLogs; } /** * 获取浏览器历史记录 包括date title url * @return */ @SuppressLint("SimpleDateFormat") public ArrayList getBrowserHistory(){ ArrayList browserHistory = new ArrayList (); try{ ContentResolver contentResolver = mContext.getContentResolver(); Cursor cursor = contentResolver.query( Uri.parse("content://browser/bookmarks"), new String[] { "title", "url", "date" }, "date!=?", null, "date desc"); SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss"); Date date; if(cursor != null ){ while(cursor.moveToNext()) { date = new Date(cursor.getLong(cursor.getColumnIndex("date"))); String title = cursor.getString(cursor.getColumnIndex("title")); String url = cursor.getString(cursor.getColumnIndex("url")); String browserhistory = sfd.format(date)+";"+title+";"+url; browserHistory.add(browserhistory); } cursor.close(); } }catch(Exception e){ e.printStackTrace(); } return browserHistory; } /** * 获取手机短信 * @return */ @SuppressLint("SimpleDateFormat") public ArrayList getSmsInPhones(){ ArrayList smsInPhones = new ArrayList (); final String SMS_URI_ALL = "content://sms/"; try{ ContentResolver cr = mContext.getContentResolver(); String[] projection = new String[]{"_id", "address", //号码 "person", //姓名 "body", //短信内容 "date", //日期 "type"}; //短信类型 Uri uri = Uri.parse(SMS_URI_ALL); Cursor cur = cr.query(uri, projection, null, null, "date desc"); if (cur.moveToFirst()){ int nameColumn = cur.getColumnIndex("person"); int phoneNumberColumn = cur.getColumnIndex("address"); int smsbodyColumn = cur.getColumnIndex("body"); int dateColumn = cur.getColumnIndex("date"); int typeColumn = cur.getColumnIndex("type"); while(cur.moveToNext()){ String name = cur.getString(nameColumn); String phoneNumber = cur.getString(phoneNumberColumn); String smsbody = cur.getString(smsbodyColumn).replaceAll(";", "."); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss"); Date d = new Date(Long.parseLong(cur.getString(dateColumn))); String date = dateFormat.format(d); int typeId = cur.getInt(typeColumn); String type = smstype[typeId]; String smsInPhone = type+";"+date+";"+name+";"+phoneNumber+";"+smsbody; smsInPhones.add(smsInPhone); } cur.close(); } }catch(Exception e){ e.printStackTrace(); } return smsInPhones; }}
权限:
android:name="android.permission.READ_CONTACTS"/>android:name="android.permission.READ_SMS" />android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>android:name="android.permission.READ_CALL_LOG"/>
源码下载:http://download.csdn.net/download/qq_31939617/9935681
更多相关文章
- Android发送短信功能代码
- android权限管理
- android小程序 查询电话号码信息
- Android打电话&发短信
- Android 应用获取通知栏权限
- Android的权限机制之—— “沙箱”机制sharedUserId跟签名