将Socket从一个Activity转移到另一个Activity

Gre*_*ein 10 sockets android android-intent android-activity

我试图将Socket属性从一个转移Activity到另一个但我不能使用Intent.putExtra()方法.

socket = new Socket("10.0.0.9", port);
i = new Intent(getBaseContext(), MainActivity.class);
i.putExtra("mysocket", socket);
Run Code Online (Sandbox Code Playgroud)

我如何Socket从一个转移Activity到另一个?

Cru*_*ceo 14

您不能将"套接字"从一个活动传递到另一个活动,但您确实有其他选择.

选项1.创建一个带有对Socket的静态引用的类,并以这种方式访问​​它.在您的第一个Activity中设置Socket,然后可以从第二个Activity中静态访问该Socket.

例如.

public class SocketHandler {
    private static Socket socket;

    public static synchronized Socket getSocket(){
        return socket;
    }

    public static synchronized void setSocket(Socket socket){
        SocketHandler.socket = socket;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过从应用程序的任何位置调用SocketHandler.setSocket(套接字)或SocketHandler.getSocket()来访问它.

选项2.覆盖应用程序并在其中具有对套接字的全局引用.

例如.

public class MyApplication extends Application {
    private Socket socket;

    public Socket getSocket(){
        return socket;
    }

    public void setSocket(Socket socket){
        SocketHandler.socket = socket;
    }
}
Run Code Online (Sandbox Code Playgroud)

此选项将要求您在清单文件中指向您的应用程序.在清单的应用程序标记中,您需要添加:

android:name="your.package.name.MyApplication"
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过在"活动"中获取对应用程序的引用来访问它:

MyApplication app = (MyApplication)activity.getApplication();
Socket socket = app.getSocket();
Run Code Online (Sandbox Code Playgroud)