Android手机用户隐私获取,包括读取通讯录、读取通话记录、读取浏览器历史记录、读取手机短信

     最近正好做到有关Android用户的隐私内容获取的问题,包括读取通讯录、读取通话记录、读取浏览器历史记录、读取手机短信;现在把完整的解决代码贴上

 其中,需要权限如下:

<!-- 读取联系人权限 -->   
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <!-- 读短信权限 -->  
    <uses-permission android:name="android.permission.READ_SMS" />
    <!-- 读取上网记录权限 -->
    <uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/> 
    <!-- 读取通话记录 -->
    <uses-permission android:name="android.permission.READ_CALL_LOG"/> 

详细代码如下:

/**
 * 获取手机通讯录 包括name(名称)和phoneNumber(号码)以;分隔	
 * @return
 */
	public ArrayList<String> getPhoneContacts(){
		ArrayList<String> contacts = new ArrayList<String>();
		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<String> getSIMContacts(){
		ArrayList<String> contacts = new ArrayList<String>();
		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<String> getCallLogs(){
		ArrayList<String> callLogs = new ArrayList<String>();
		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<String> getBrowserHistory(){
		ArrayList<String> browserHistory = new ArrayList<String>();
		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<String> getSmsInPhones(){
		ArrayList<String> smsInPhones = new ArrayList<String>();
		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;
	}

项目包下载地址 http://download.csdn.net/detail/u011342532/7961491

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值