2012-10-31 161 views
1

我有一個應用程序,你必須像用戶一樣使用你的密碼登錄。會話用戶管理android

此應用程序需要安全,所以需要在確定的時間段內(例如5分鐘)在沒有屏幕顯示時註銷用戶。

問題是,一旦用戶登錄,他可以通過許多活動,而不僅僅是一個,我想知道是否有一種方法在Android中知道用戶是否可以在登錄後退出一會兒。

我在考慮使用onInterceptTouchEvent(MotionEvent ev)方法,但問題是,我必須在每個活動中使用這種方法嗎? ¿還有另一種更簡單的方法來在Android中管理它?

非常感謝!

回答

1

而是在每一個Activity實現這個的,你可以創建一個Activity這樣的:

public class BaseActivity extends Activity 

,並在您BaseActivity實施onInterceptTouchEvent

然後從所有其他Activities你將不得不延長BaseActivity

UPDATE: 如果你想聆聽到整個屏幕的事件,您將不得不使用onTouch。這就要求在你的Activity的每個xml文件中,你必須給你的xml的根視圖(Linearlayout,Relativelayout,Framelayout或其他)提供一個id。因此,爲了讓您的BaseActivity從其他Activities輸入你將有你的根視圖傳遞給它的,就像這樣:

public class MyActivity extends BaseActivity{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.my_activity); 
     super.setRootView(findViewById(R.id.rootView)); 
    } 
} 

public class BaseActivity extends Activity implements OnTouchListener{ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    public void setRootView(View rootView){ 
     rootView.setOnTouchListener(this); 
    } 

    public boolean onTouch(View v, MotionEvent event) { 
     Log.d("BaseActivity", "onTouch!"); 
     return super.onTouchEvent(event); 
    } 
} 
+0

這可能是解決我的問題的可能解決方案!我會嘗試一下,並且如果它在工作,就會對你的評論「有用」!非常感謝!! – zapotec

+0

好的伴侶,祝你好運! – Carnal

+0

好吧,我明白了......但是,現在我有一個問題。 ¿如何使用「onInterceptTouchEvent」方法?我正在檢查,它是從「ViewGroup」(所以,這意味着,從LinearLayout,RelativeLayout等....的方法......但我的BaseActivity沒有任何alyout !!我怎麼能使用它???任何人都知道任何教程??? – zapotec

1

1.實現此目的的一種方法是在用戶登錄到應用程序時獲取當前時間(使用System.currentTimeMillis())。我們將其保存在變量t1中。

2.啓動服務,其將監視/檢查/執行以下東西:

2a上。每當用戶觸摸您的任何活動時,都會將t1的值設置爲當前時間。

2b。不斷獲得當前時間(t2)並且計算在t1t2(即t2 - t1)之間的時間推移。如果這個延時等於或大於5分鐘,你可以調用logOut()函數。

是的,您將不得不通知後臺服務該用戶存在,從每個活動。儘管通過Carnal提供的解決方案將大大減少您實現這一目標的努力。

+0

謝謝!有了Carnal和你的兩個解決方案,我想我可以做到!非常感謝!! – zapotec