2015-10-01 2 views
1

Я разрабатываю приложение, которое просит пользователя вводить пароль каждый раз, когда он покидает приложение или нажимает кнопку «домой». Это будет применяться ко всем видам деятельности. Я пробовал жизненный цикл деятельности onResume, onRestart и так далее. но они будут вызваны при переходе от одного вида деятельности к другому. я попробовал этот код также, когда моя заявка уходит на задний план

@Override 
public void onUserLeaveHint() { 
    long uiDelta = (System.currentTimeMillis() - userInteractionTime); 

    super.onUserLeaveHint(); 
    Log.i("bThere","Last User Interaction = "+uiLag); 
    if (uiDelta < 100) 
     Log.i("appname","Home Key Pressed");  
    else 
     Log.i("appname","We are leaving, but will probably be back shortly!"); 

Но это будет вызываться при переключении между различными видами деятельности не только при нажатии кнопки домой.

Любая идея о том, как я могу обнаружить, оставляя приложение?

+0

попробуйте использовать onWindowFocusChanged и onStop методы. Подробнее можно найти здесь -> http://vardhan-justlikethat.blogspot.in/2013/05/android-solution-to-detect-when-android.html – shaydel

+0

@shaydel Я пробовал, но это то же самое.когда я перейду к другому действию Intent, он даст мне, что приложение находится в фоновом режиме. – Abdqr92

+0

Я не должен понимать вас, вы, кажется, обнаруживаете, что ваше приложение находится на заднем плане, когда другое приложение впереди, чего не хватает? – shaydel

ответ

0

Вы можете проверить, если ваше приложение в фоновом режиме или нет

1 - вы должны включить android.permission.GET_TASKS в вашем AndroidManifest.xml

2 -Положите этот код в вас классе Application.


public static boolean isApplicationSentToBackground(final Context context) { 
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    List tasks = am.getRunningTasks(1); 
    if (!tasks.isEmpty()) { 
     ComponentName topActivity = tasks.get(0).topActivity; 
     if (!topActivity.getPackageName().equals(context.getPackageName())) { 
     return true; 
     } 
    } 

    return false; 
    } 
0

Вы можете отправить дополнительное логическое значение на намерениях, которые выполняют поток между вашей деятельностью с указанием, что запрос пароля не должен быть запрошен. то в ваших действиях onResume вы будете использовать этот логический один раз и переверните его на false, так что в следующий раз, когда активизация возобновится, пароль будет запрошен снова. это должно работать, я думаю. сообщите нам, если бы это произошло :)

0

Удалить историю, когда Пользователь переключается между действиями. Поэтому он не может использовать подкладку.

0

У меня также есть аналогичная проблема, когда я хочу отключить соединение чат-сервера, когда приложение больше не используется или в фоновом режиме. В iOS существует метод

didEnterInBackground() 

, который используется для определения того, когда приложение находится в фоновом режиме или нет. Я искал подобное поведение в android, но в итоге использовал обходной путь для решения.

Так что же решило решение моей проблемы, я добавляю таймер для каждого действия onPause и onResume. Начните таймер в режиме onPause хоста и остановите движение таймера в режиме onResume целевой активности. Поэтому, если нет целевой активности (приложение в фоновом режиме или другое приложение входит), оно автоматически отключит сервер чата.

timer = new Timer(); 
    timer.schedule(new TimerTask() { 
     @Override 
     public void run() { 
      disconnectChatServer(); 
     } 
    },1000); 

Вы можете отрегулировать задержку, которая в миллисекундах.

0
/** 
* 
* @param context 
* @return 
*/ 
public static boolean isBackground(Context context) {  
    ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses(); 
    for (RunningAppProcessInfo appProcess : appProcesses) { 
     if (appProcess.processName.equals(context.getPackageName())) { 
      if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_BACKGROUND) { 
       Log.i(String.format("Background App:", appProcess.processName)); 
       return true; 
      }else{ 
       Log.i(String.format("Foreground App:", appProcess.processName)); 
       return false; 
      } 
     } 
    } 
    return false; 
} 
0

Уезжая активность или Home кнопку нажал,

Activity`s метод жизненного цикла, метод OnPause() используется для вызова. Если приложение нуждается в памяти для другой операции, то переместится на метод onStop().

Пожалуйста, дайте мне знать, если я очистил ваш вопрос.

Спасибо.

 Смежные вопросы

  • Нет связанных вопросов^_^