2014-02-06 4 views
8

다른 앱에서 돌아온 후 내 앱이 포커스를 다시 얻으면 잠금 화면을 표시하는 보안 기능을 구현하는 데이 기능을 사용하고 있습니다.isApplicationBroughtToBackground 보안 기능이 잘못되었습니다.

이제는 보안 기능이 두 번 표시되는 문제가 있습니다. 약간 주위를 파고 나면 ActivityManager.getRunningTasks (1)의 topActivity가 방금 반환 한 활동 인 것으로 나타났습니다.

내 경우에 문제가되는 느린 응용 프로그램은 com.android.mms 및 com.google.android.apps.maps입니다.

나는 응용 프로그램 내에서 호출 기능을 가지고 있지만 오작동은 아닙니다.

나는이 동작에 대해 완전히 당혹 스럽다.

+0

당신의 질문이 무엇인지 정말 분명하지 않다 :

@Override protected void onPause() { Utils.wentInBackground(this); super.onPause(); } @Override protected void onResume() { Utils.wentInForeground(this); super.onResume(); } 

그리고 정적 유틸리티 클래스에서이 있습니다. 또한 어떤 isApplicationBroughtToBackground() 메소드도 모른다. 그거 어디서 났어? – nicopico

답변

0

Android에서 실제로 문제가되는 경우입니다. 나를 위해 일한 다음을 시도하십시오 :

귀하의 활동을위한 기본 수업을 준비하십시오. 이 글은 :

public static void wentInBackground(final Activity which) { 
    inBackground = true; 
    lastPaused = which.getClass().getSimpleName(); 

    final PowerManager powerManager = (PowerManager) which.getSystemService(POWER_SERVICE); 
    final boolean isScreenOn = powerManager.isScreenOn(); 

    if (isApplicationSentToBackground(which) || !isScreenOn) { 
     // Do your security lockdown here. 
    } 
} 


public static boolean isApplicationSentToBackground(final Context context) { 
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    List<RunningTaskInfo> tasks = am.getRunningTasks(1); 

    if (!tasks.isEmpty()) { 
     ComponentName topActivity = tasks.get(0).topActivity; 
     if (!topActivity.getPackageName().equals(context.getPackageName())) { 
      return true; 
     } 
    } 

    return false; 
} 


public static void wentInForeground(final Activity which) { 
    inBackground = false; 
    final String activityName = which.getClass().getSimpleName(); 

    if (lastPaused.equals(activityName) || !isLoggedIn()) { 

     if (isLoggedIn()) { 
      // Do your security lockdown here again, if necessary. 
     } 

     // Show your security screen or whatever you need to. 
    } 
} 

public static boolean isLoggedIn() { 
    return loggedIn; 
} 
+0

안녕하세요. 너무 늦게 답변 해 주셔서 죄송합니다. 나는 isLoggedIn의 사용법을 알고 싶다. 너 좀 자세히 설명해 줄래? –

+0

이것은 아마도 유스 케이스에 특정한 것입니다. 사용자가 로그인했는지 여부를 결정하는 다른 논리가있을 수 있습니다. 너가 이것을 필요로하지 않는다고 생각하면 그냥 버려라. – Stan