2013-07-04 3 views
0

Надеюсь, кто-то может указать мне в правильном направлении. В настоящее время я разрабатываю приложение для медицинских целей. Чтобы защитить свои персональные данные, пользователь получит возможность создать пароль. Без этого пароля должен быть, по крайней мере, доступ ко всему приложению. Я реализовал простой диалог ввода в моем прямом подклассе деятельности (который унаследован для всех других видов деятельности).Жизненный цикл активности Android для запроса пароля

Но если приложение запускает другое действие, жизненный цикл также вызывает диалог пароля. Даже если пользователь только сохранил свои данные.

Как я могу определить, что пользователь приходит извне приложения? Я пробовал много, и кажется, что жизненный цикл остается таким же, если он только начинает другую деятельность или отправляется на задний план, и пользователь возвращается (что должно вызвать диалог).

Заранее спасибо

ответ

0

Хорошо, я наконец нашел решение этой проблемы. В конце концов, наследование приложения было правильным вариантом. Я сохраняю последнее приостановленное действие, и если тот же самый будет возобновлен в любое время, я покажу диалог. Также я должен позаботиться о изменениях конфигурации, которые заставляют активность перезапускаться. Если кто-то получает в той же проблемой, как и я, Херес код:

package at.***.**********.util; 

import org.holoeverywhere.app.Application; 

import android.app.Activity; 
import android.content.ComponentCallbacks; 
import android.content.res.Configuration; 
import android.os.Bundle; 
import android.util.Log; 

public class MyCustomApplication extends Application { 
    private String lastActivity = ""; 
    private Boolean configChanged = false; 

    public Boolean getConfigChanged() { return configChanged; } 
    public void setConfigChanged(Boolean configChanged) { this.configChanged = configChanged; } 

    private ActivityLifecycleCallbacks activityCallback = new ActivityLifecycleCallbacks() { 
     @Override 
     public void onActivityStopped(Activity activity) { } 
     @Override 
     public void onActivityStarted(Activity activity) { } 
     @Override 
     public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } 
     @Override 
     public void onActivityDestroyed(Activity activity) { } 
     @Override 
     public void onActivityCreated(Activity activity, Bundle savedInstanceState) { } 

     @Override 
     public void onActivityResumed(Activity activity) { 
      if (activity.getClass().getName().equals(lastActivity) && !getConfigChanged()) { 
       Log.v(activity.getClass().getName(), "Make activity show password dialog"); 
      } 
      setConfigChanged(false); 
     } 

     @Override 
     public void onActivityPaused(Activity activity) { 
      lastActivity = activity.getClass().getName(); 
     } 
    }; 

    private ComponentCallbacks componentCallback = new ComponentCallbacks() { 
     @Override 
     public void onLowMemory() { } 
     @Override 
     public void onConfigurationChanged(Configuration newConfig) { 
      setConfigChanged(true); 
     } 
    }; 

    @Override 
    public void onCreate() { 
     registerActivityLifecycleCallbacks(activityCallback); 
     registerComponentCallbacks(componentCallback); 
     Log.v("Application startet", "Application startet"); 
     super.onCreate(); 
    } 

    @Override 
    public void onTerminate() { 
     unregisterActivityLifecycleCallbacks(activityCallback); 
     unregisterComponentCallbacks(componentCallback); 
     super.onTerminate(); 
    } 
} 

, если вы когда-либо перезапустить вашу деятельность, вы можете позвонить:

((MyCustomApplication)getApplication).setconfigChanged(true); 

Не забывайте, что сказать Android в используйте свое обычное приложение в манифесте:

<application 
    android:name="at.***.**********.util.MyCustomApplication" 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" 
    android:hardwareAccelerated="true" > 

Я уверен, что может быть лучший способ, но я еще не нашел его. Спасибо, много парней!

0

Вы можете использовать SharedPreferences написать флаг, указывающий, что вы вошли в систему. Затем вы можете очистить этот флаг в OnDestroy вашего основного вида деятельности или где бы вы выйти из приложения.

+0

Спасибо за ваши ответы! Моя проблема не сводится к сохранению пароля. Это то, что я должен получить пользователя на левый экран, если он покинет приложение через домашнюю кнопку. Тем не менее, это не срабатывает. – blender

+0

В этом случае вы можете записать в SharedPreferences, на экране которого вы сейчас показываете, например, некоторый код такого четного целого для каждой строки. Затем у вас есть собственный класс приложения, расширяющий приложение Android. Не забудьте зарегистрировать его в своем манифесте. В следующий раз, когда вы запустите свое приложение, оно будет первым в вашем приложении onCreate. Там вы можете прочитать код и запустить соответствующий экран. –

+0

Привет, спасибо за ваш быстрый ответ. Я также попытался наследовать класс приложения, используя onCreate, чтобы определить начало приложения. Но на самом деле приложение не будет прекращено, если пользователь просто покинет приложение с помощью кнопки «домой» и вернется к нему. Вот почему сам жизненный цикл мне не помогает. – blender

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