특정 어플이 실행되면 진짜 종료는 아니더라도 비슷한 효과를 줄 수 없을까요?


아래에서 앱잠금 어플을 만드려하고 있는 대학생입니다.

좋은 답변을 많이 해주셔서 특정 앱이 실행되는 이벤트를 뺏어오는 것은 상당히 어렵다는 것을 알게되었습니다.

하여 대체할 수 있는 방법이 무엇이 있을지 생각해보았는데

  1. 일단 실행시킨 후 해당 앱이면 내가 만든 앱이 따라 켜진 후 내 앱의 액티비티가 스크린에 보이기, 내 앱을 끄면 해당 앱도 같이 꺼지기

  2. 일단 실행시킨 후 해당 앱에서 터치 등의 동작이 한번 더 이루어지면 1번과 같이 액티비티 띄우기

  3. 일단 실행시킨 후 해당 앱이면 계속 onStop으로 보내기

실행의 우선권을 뺏는 것이 어렵다면 실행을 일단 시킨 후 막을 방법에 대해 생각을 해보았습니다. 어떤 방법이 가장 현실적일지 조언해주시면 다시 한번 정말 감사하겠습니다.


  • 새로운 것에 직접 부딪혀 해쳐나가는 것이 진정한 실력입니다. 공식 문서를 참고해보세요.    이창호   2016.3.31 17:01     
  • 감사합니다. 꼭 명심하겠습니다!!    ShinDongHyuk   2016.4.9 01:32     
조회수 554


1 답변


좋아요
2
싫어요
채택취소하기

앱잠금 앱이라하면 https://play.google.com/store/apps/details?id=com.domobile.applock 이런 앱을 말씀하시는건가요? 마켓에서 다운받아서 테스트해보니 앱잠금이 잘 동작하네요.

이런것을 구현하시려는거라면...(혹시 제가 잘못이해한것이라면 알려주세요.)

AccessibilityService 를 이용해보세요.

AccessibilityService를 이용하려면 AndroidManifest에는 아래와 같은 권한이 필요합니다.

<application>
    <service
        android:label="@string/accessibility_service_name"
        android:name=".WindowChangeDetectingService"
        android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
        <intent-filter>
            <action android:name="android.accessibilityservice.AccessibilityService"/>
        </intent-filter>
        <meta-data
            android:name="android.accessibilityservice"
            android:resource="@xml/accessibilityservice"/>
    </service>
</application>

위와같은 권한이 포함되면 사용자는 설정에서 접근성 권한을 켜줘야 동작합니다. 사용자가 접근성권한을 켜면 앱들이 실행되거나 변화가 있을때 AccessibilityEvent 를 받을 수 있습니다.

public class MyAccessibilityService extends AccessibilityService implements OnInitListener {

    private static final String LOG_TAG = "onAccessibilityEvent";

    @Override
    public void onServiceConnected() {
    }

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) { 
    //어느앱이던지 앱이 실행되면 여기로 무조건 AccessibilityEvent가 들어옵니다. 여기서 해당앱인지 체크를 하고 앱이 맞으면 내가 설정한 앱을 띄워주면 되지 않을까요?
        AccessibilityNodeInfo source = event.getSource();
        if (source != null && source.getText() != null) {
            Log.i(LOG_TAG, source.toString());
            Log.i(LOG_TAG, source.getText().toString());
        }
    }


    @Override
    public void onInterrupt() {
        /* do nothing */
    }


    @Override
    public void onInit(int status) {
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    @Override
    protected boolean onKeyEvent(KeyEvent event) {
        return false;
    }
}

위와같은 방법으로 해보면 되지 않을까 싶어요. Acceeibility에 관한 간단한 예제소스를 참고해보세요.

  • 2016년 04월 09일에 작성됨
    안드로이드, 루비온레일즈

  • 와 이런 서비스가 있었군요!!!! 정성스런 답변에 정말 진심으로 감사드립니다. 정말 아쉽게도 프로젝트 아이템을 잠금화면에서 문제를 풀어 잠금해제할 수 있는 앱으로 바꾸었습니다ㅠㅠ 그렇지만 답변해주신 내용 꼭 기억해두었다가 소중히 사용하도록 하겠습니다. 감사합니다.    ShinDongHyuk   2016.4.9 01:37     

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

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