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


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

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

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

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

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

  • 2016년 08월 22일에 작성됨

조회수 92


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

  • 2016년 08월 23일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close