안드로이드: 다른 앱들이 실행되었을때 감지하는법

조회수 4156회

안녕하세요. 전 현재 유저가 패스워드없이 특정 앱을 쓰는걸 방지하는 앱을 개발하려고 하는데요. 시나리오는 이렇습니다...

  1. 유저가 "이메일" 앱을 클릭 (예를 들면)
  2. 저의 앱이 다른앱이 켜진걸 감지
  3. 제 앱이 이것이 "이메일"앱임을 확인
  4. 제 앱이 그앱 바로위 에 view를 열어 비밀번호를 물음
  5. 유저가 맞는 비밀번호를 입력하면 제 앱이 사라지고 "이메일" 앱만 화면 상단에 남음

다른건 다 할줄 아는데, 2번은 어떻게 해야할지 모르겠습니다. 그리고 Broadcasting Intents 등등 또는 제 trial project에 있는 "android.intent.action.MAIN"을 살펴봐도 제 앱이 아닌 다른앱이 실행됐을때 이것을 감지하는 방법을 도무지 찾을수가 없네요.

도와주실분 계신가요. Intent 를 BroadCast해줄 새로운 앱들을 알아보는게 맞을까요, 아님 새로운 intents를 보기 위해 시스템 로그를 확인해야하나요, 아니면 코딩자체를 손봐야할까요.

꼭 확답이 아니더라도 어떤 힌트도 정말 많은 도움이 될거 같습니다. 미리 감사드립니다.

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    제 생각에는 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에 권환을 주시는걸 꼭 잊지 마시구요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)