안드로이드: 다른 앱들이 실행되었을때 감지하는법
조회수 4161회
안녕하세요. 전 현재 유저가 패스워드없이 특정 앱을 쓰는걸 방지하는 앱을 개발하려고 하는데요. 시나리오는 이렇습니다...
- 유저가 "이메일" 앱을 클릭 (예를 들면)
- 저의 앱이 다른앱이 켜진걸 감지
- 제 앱이 이것이 "이메일"앱임을 확인
- 제 앱이 그앱 바로위 에 view를 열어 비밀번호를 물음
- 유저가 맞는 비밀번호를 입력하면 제 앱이 사라지고 "이메일" 앱만 화면 상단에 남음
다른건 다 할줄 아는데, 2번은 어떻게 해야할지 모르겠습니다. 그리고 Broadcasting Intents 등등 또는 제 trial project에 있는 "android.intent.action.MAIN"을 살펴봐도 제 앱이 아닌 다른앱이 실행됐을때 이것을 감지하는 방법을 도무지 찾을수가 없네요.
도와주실분 계신가요. Intent 를 BroadCast해줄 새로운 앱들을 알아보는게 맞을까요, 아님 새로운 intents를 보기 위해 시스템 로그를 확인해야하나요, 아니면 코딩자체를 손봐야할까요.
꼭 확답이 아니더라도 어떤 힌트도 정말 많은 도움이 될거 같습니다. 미리 감사드립니다.
1 답변
-
제 생각에는 logcat을 사용해서 output을 확인하는것이 좋을듯 합니다.
프로그램들 중에서 제가 한가지 공통점을 찾았는데:
android.permission.READ_LOGS
바로 위와 같은 권한을 요구하더군요. 이말은 모든 유사 프로그램들이 위의 로그를 사용한다는것이지요. 프로그램이 시작되고 그후에 질문자가 원하는 프로그램(앱 프로텍터)이 시작되고 상단에 뜨게 됩니다.
밑의 코드를 한번 써보세요:
try { Process mLogcatProc = null; BufferedReader reader = null; mLogcatProc = Runtime.getRuntime().exec(new String[]{"logcat", "-d"}); reader = new BufferedReader(new InputStreamReader(mLogcatProc.getInputStream())); String line; final StringBuilder log = new StringBuilder(); String separator = System.getProperty("line.separator"); while ((line = reader.readLine()) != null) { log.append(line); log.append(separator); } String w = log.toString(); Toast.makeText(getApplicationContext(),w, Toast.LENGTH_LONG).show(); } catch (Exception e) { Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show(); }
그리고 Manifest file에 권환을 주시는걸 꼭 잊지 마시구요.
댓글 입력