android即时消息应用程序

时间:2015-12-16 04:09:28

标签: android messaging

我对Android很新,但有些东西我真的想要构建,我真的需要一些关于如何以及我应该研究的建议。

它基本上将成为Android的即时消息应用程序,它是一个仅适用于2人的应用程序。人A和人B,他们将不得不以某种方式连接到彼此的电话(我假设使用一些唯一的ID?),并且他们的手机上会有一个小部件。当人A按下按钮时,B人将收到一个随机消息,该消息弹出B人的电话,并在B人的电话上振动。当B人再次按它作为回复时,它会对A人的电话做同样的事情。

我应该为这种应用寻找什么样的图书馆或概念?

谢谢

2 个答案:

答案 0 :(得分:1)

您可以实施移动云来执行此操作。例如:Google Cloud Message,Parse,... 这些是替换网络服务器来接收消息,处理它们并发送给其他人。 我建议使用Parse:https://parse.com/(使用推送通知功能)。它还支持Geopoint,存储文件,发送消息,......

答案 1 :(得分:1)

https://thinkandroid.wordpress.com/2010/03/27/incorporating-socket-programming-into-your-applications/

  

这个想法涉及套接字编程,基本上让一部手机成为“服务器”而另一部手机成为“客户端”。现在,我不知道这是否是允许两部手机相互通信的标准做法,但它在我一直在努力的新应用程序中对我有用,所以这里是:   公共类ServerActivity扩展了Activity {

private TextView serverStatus;

// DEFAULT IP
public static String SERVERIP = "10.0.2.15";

// DESIGNATE A PORT
public static final int SERVERPORT = 8080;

private Handler handler = new Handler();

private ServerSocket serverSocket;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.server);
    serverStatus = (TextView) findViewById(R.id.server_status);

    SERVERIP = getLocalIpAddress();

    Thread fst = new Thread(new ServerThread());
    fst.start();
}

public class ServerThread implements Runnable {

    public void run() {
        try {
            if (SERVERIP != null) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        serverStatus.setText("Listening on IP: " + SERVERIP);
                    }
                });
                serverSocket = new ServerSocket(SERVERPORT);
                while (true) {
                    // LISTEN FOR INCOMING CLIENTS
                    Socket client = serverSocket.accept();
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            serverStatus.setText("Connected.");
                        }
                    });

                    try {
                        BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
                        String line = null;
                        while ((line = in.readLine()) != null) {
                            Log.d("ServerActivity", line);
                            handler.post(new Runnable() {
                                @Override
                                public void run() {
                                    // DO WHATEVER YOU WANT TO THE FRONT END
                                    // THIS IS WHERE YOU CAN BE CREATIVE
                                }
                            });
                        }
                        break;
                    } catch (Exception e) {
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                serverStatus.setText("Oops. Connection interrupted. Please reconnect your phones.");
                            }
                        });
                        e.printStackTrace();
                    }
                }
            } else {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        serverStatus.setText("Couldn't detect internet connection.");
                    }
                });
            }
        } catch (Exception e) {
            handler.post(new Runnable() {
                @Override
                public void run() {
                    serverStatus.setText("Error");
                }
            });
            e.printStackTrace();
        }
    }
}

// GETS THE IP ADDRESS OF YOUR PHONE'S NETWORK
private String getLocalIpAddress() {
    try {
        for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
            NetworkInterface intf = en.nextElement();
            for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                InetAddress inetAddress = enumIpAddr.nextElement();
                if (!inetAddress.isLoopbackAddress()) { return inetAddress.getHostAddress().toString(); }
            }
        }
    } catch (SocketException ex) {
        Log.e("ServerActivity", ex.toString());
    }
    return null;
}

@Override
protected void onStop() {
    super.onStop();
    try {
         // MAKE SURE YOU CLOSE THE SOCKET UPON EXITING
         serverSocket.close();
     } catch (IOException e) {
         e.printStackTrace();
     }
}

}

您将拥有一个客户端和一台服务器。服务器发送给客户端。由于两部电话都是相互发送的,因此客户端和服务器将不断切换。您也可以尝试使用蓝牙实现:

android bluetooth implementation basics

有很多方法可以进行网络连接,你应该研究一下。但是,为了振动手机,就像你说的那样,只需使用以下代码:

import android.os.Vibrator;
 ...
 Vibrator v = (Vibrator) this.context.getSystemService(Context.VIBRATOR_SERVICE);
 // Vibrate for 500 milliseconds
 v.vibrate(500);

您需要在清单中获得此权限:

<uses-permission android:name="android.permission.VIBRATE"/>

请告诉我这是否有帮助!

: - )