Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Native Socket.IO and Android

Native Socket.IO and Android

編輯:關於Android編程

原文鏈接地址:http://socket.io/blog/native-socket-io-and-android/

android chat demo

在本教程中我們將學習如何創建一個聊天客戶端用socket . ioNode. JS做為聊天服務器,我們的 nativate安卓客戶端! 如果你想直接跳轉到代碼,它在GitHub。 否則,繼續讀下去!

 

#介紹

跟隨,首先克隆存儲庫:socket.io-android-chat。

應用程序具有以下特點:

  • 發送消息到所有用戶加入到房間。
  • 每個用戶加入或者離開時通知。
  • 一個用戶開始輸入信息時通知。

Socket.IO提供了一個面向事件的API,可以在所有網絡、設備和浏覽器。 非常健壯的(甚至作品背後的公司代理!)和高性能,這是非常適合多人游戲或實時通信。

#安裝的依賴關系

第一步是安裝Java Socket。 輸入輸出端與Gradle。

對於這個應用程序,我們將依賴項添加到build.gradle:

// app/build.gradle
dependencies {
    ...
    compile 'com.github.nkzawa:socket.io-client:0.3.0'
}

我們必須記住添加網絡許可AndroidManifest.xml



    
    ...

現在我們可以在android上使用socket.IO!

#在Activity和Fragment使用Socket

首先,我們必須初始化Socket.io 的一個新實例。如下:

import com.github.nkzawa.socketio.client.IO;
import com.github.nkzawa.socketio.client.Socket;

private Socket mSocket;
{
    try {
        mSocket = IO.socket("http://chat.socket.io");
    } catch (URISyntaxException e) {}
}

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

IO.socket()返回Sockethttp://chat.socket.io使用默認選項。 注意,方法緩存結果,所以你可以得到一個相同的 Scocket從任何Activity或Fragment實例的url。

我們顯式調用connect()在這裡建立連接(與JavaScript客戶端)。 在這個程序中,我們使用onCreate生命周期回調,但它實際上取決於您的應用程序。

#發射事件

發送數據看起來如下。 在這種情況下,我們發送一個字符串,但你也可以做JSON數據org.json包,甚至還支持二進制數據!

private EditText mInputMessageView;

private void attemptSend() {
    String message = mInputMessageView.getText().toString().trim();
    if (TextUtils.isEmpty(message)) {
        return;
    }

    mInputMessageView.setText("");
    mSocket.emit("new message", message);
}

#監聽事件

就像我前面提到的,Socket.IO 是雙向的,這意味著我們可以向服務器發送事件,但也隨時在通信服務器可以發送事件。

然後我們可以Socket監聽事件onCreate生命周期回調。

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

    mSocket.on("new message", onNewMessage);
    mSocket.connect();
}

我們監聽 new message事件從其他用戶接收消息。

import com.github.nkzawa.emitter.Emitter;

private Emitter.Listener onNewMessage = new Emitter.Listener() {
    @Override
    public void call(final Object.. args) {
        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                JSONObject data = (JSONObject) args[0];
                String username;
                String message;
                try {
                    username = data.getString("username");
                    message = data.getString("message");
                } catch (JSONException e) {
                    return;
                }

                // add the message to view
                addMessage(username, message);
            }
        });
    }
};

這就是onNewMessage的樣子。 一個偵聽器的一個實例Emitter.Listener,必須實施call方法。 你會注意到裡面的call()包裝的 Activity# runOnUiThread(),這是因為回調總是另一個線程從Android UI線程裡面調用,因此我們必須確保將消息添加到UI線程的視圖上。

#套接字狀態管理

因為一個Android活動有自己的生命周期,我們也應該仔細管理套接字的狀態,以避免內存洩漏等問題。 在這個程序中,我們將關閉套接字連接,刪除所有的聽眾onDestroy回調的活動。

@Override
public void onDestroy() {
    super.onDestroy();

    mSocket.disconnect();
    mSocket.off("new message", onNewMessage);
}

調用 off()刪除new message()的偵聽器事件。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved