利用融雲的連接機制來實現App的單點登錄

單點登錄就是在當前終端登錄APP,但在另一終端又重新登錄的時候,當前登錄的APP會退出並給出提示。

由於項目集成了融雲IM,並且融雲也給出判斷連接的機制,所以就利用融雲來實現整個App的單點登錄的監聽。

做法如下:

首先創建一個類,並實現ConnectionStatusListener接口(融雲給出的接口,具體請看官方文檔,在這就不多說),然後設置相應的彈出框即可,代碼如下:

@Override
    public void onChanged(ConnectionStatus connectionStatus) {
        switch (connectionStatus){

            case CONNECTED://連接成功。

                break;
            case DISCONNECTED://斷開連接。

                break;
            case CONNECTING://連接中。

                break;
            case NETWORK_UNAVAILABLE://網絡不可用。

                break;
            case KICKED_OFFLINE_BY_OTHER_CLIENT://用戶賬戶在其他設備登錄,本機會被踢掉線
                new Handler(Looper.getMainLooper()).post(new Runnable() {
                    @Override
                    public void run() {
                        Intent intent=new Intent(context,ConnectStatusDialog.class);
                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
                        context.startActivity(intent);
                    }
                });
                break;
        }
    }

值得注意的是,這裏需要在主線程中彈出對話框,我這是使用Activity作爲一個對話框來顯示UI,所以跳轉到另一Activity裏去執行相應操作。

new Handler(Looper.getMainLooper()).post(new Runnable() 這段代碼是切換到主線程中顯示,必須是在主線程。

還需注意的是:

從一個Activity中要通過intent調出另一個Activity的話,需要使用 FLAG_ACTIVITY_NEW_TASK 
否則的話,會有force close: 
E/AndroidRuntime( 2706): FATAL EXCEPTION: main 
E/AndroidRuntime( 2706): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 


FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS: 
如果調出的Activtivity只是一個功能片段,並沒有實際的意義,也沒有必要出現在長按Home鍵調出最近使用過的程序類表中,那麼使用FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 
Intent intent = new Intent(this, 目的.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 
startActivity(intent); 


注意事項就這麼多,到此爲止

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章