Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid chat using Smack API and talk.goolgle.com server
    text
    copied!<p>I want to create an android chat application using smack api and <strong>talk.google.com</strong> server but the problem is that when I create a connection to Smack API using gmail id and password and check my user name using "connection.getuser()" my id is showm in following format "anything@gmail.com/Smack_<strong><em></strong>(some smack id)".Now if I send a message from my app using another phone to "anything@gmail.com" it is not recieved but if I send it to "anything@gmail.com/Smack</em><strong>_</strong>(same smack id)" it is properly recieved.</p> <p>The smack id being appended is random and changes everytime I connect so it is impossible for me to obtain it by any means and thus message cannot be sent,so how can I overcome this problem.</p> <p>The code for my ChatActivity is:</p> <pre><code> package com.prince.chat; import java.util.ArrayList; import java.util.Collection; import org.jivesoftware.smack.ConnectionConfiguration; import org.jivesoftware.smack.PacketListener; import org.jivesoftware.smack.Roster; import org.jivesoftware.smack.RosterEntry; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smack.filter.MessageTypeFilter; import org.jivesoftware.smack.filter.PacketFilter; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Packet; import org.jivesoftware.smack.packet.Presence; import org.jivesoftware.smack.util.StringUtils; import android.os.Bundle; import android.os.Handler; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; public class ChatActivity extends Activity { public static final String HOST = "talk.google.com"; public static final int PORT = 5222; public static final String SERVICE = "gmail.com"; public static String USERNAME ; public static String PASSWORD ; private XMPPConnection connection; private ArrayList&lt;String&gt; messages = new ArrayList&lt;String&gt;(); private Handler mHandler = new Handler(); private EditText recipient; private EditText textMessage; private ListView listview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_chat); recipient = (EditText) this.findViewById(R.id.toET); textMessage = (EditText) this.findViewById(R.id.chatET); listview = (ListView) this.findViewById(R.id.listMessages); setListAdapter(); Intent i = getIntent(); USERNAME= i.getStringExtra("email"); PASSWORD =i.getStringExtra("password"); // Set a listener to send a chat text message Button send = (Button) this.findViewById(R.id.sendBtn); send.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { String to = recipient.getText().toString(); String text = textMessage.getText().toString(); Log.i("XMPPChatDemoActivity ", "Sending text " + text + " to " + to); Message msg = new Message(to, Message.Type.chat); msg.setBody(text); if (connection != null) { connection.sendPacket(msg); messages.add(connection.getUser() + ":"); messages.add(text); setListAdapter(); } } }); connect(); } /** * Called by Settings dialog when a connection is establised with * the XMPP server */ public void setConnection(XMPPConnection connection) { this.connection = connection; if (connection != null) { // Add a packet listener to get messages sent to us PacketFilter filter = new MessageTypeFilter(Message.Type.chat); connection.addPacketListener(new PacketListener() { @Override public void processPacket(Packet packet) { Message message = (Message) packet; if (message.getBody() != null) { String fromName = StringUtils.parseBareAddress(message.getFrom()); Log.i("XMPPChatDemoActivity ", " Text Recieved " + message.getBody() + " from " + fromName); messages.add(fromName + ":"); messages.add(message.getBody()); // Add the incoming message to the list view mHandler.post(new Runnable() { public void run() { setListAdapter(); } }); } } }, filter); } } private void setListAdapter() { ArrayAdapter&lt;String&gt; adapter = new ArrayAdapter&lt;String&gt;(this, R.layout.listitem, messages); listview.setAdapter(adapter); } @Override protected void onDestroy() { super.onDestroy(); try { connection.disconnect(); } catch (Exception e) { } } public void connect() { final ProgressDialog dialog = ProgressDialog.show(this, "Connecting...", "Please wait...", false); Thread t = new Thread(new Runnable() { @Override public void run() { // Create a connection ConnectionConfiguration connConfig = new ConnectionConfiguration(HOST, PORT, SERVICE); XMPPConnection connection = new XMPPConnection(connConfig); try { connection.connect(); Log.i("XMPPChatDemoActivity", "[SettingsDialog] Connected to "+connection.getHost()); } catch (XMPPException ex) { Log.e("XMPPChatDemoActivity", "[SettingsDialog] Failed to connect to "+ connection.getHost()); Log.e("XMPPChatDemoActivity", ex.toString()); setConnection(null); } try { connection.login(USERNAME, PASSWORD); Log.i("XMPPChatDemoActivity", "Logged in as" + connection.getUser()); // Set the status to available Presence presence = new Presence(Presence.Type.available); connection.sendPacket(presence); setConnection(connection); Roster roster = connection.getRoster(); Collection&lt;RosterEntry&gt; entries = roster.getEntries(); for (RosterEntry entry : entries) { Log.d("XMPPChatDemoActivity", "--------------------------------------"); Log.d("XMPPChatDemoActivity", "RosterEntry " + entry); Log.d("XMPPChatDemoActivity", "User: " + entry.getUser()); Log.d("XMPPChatDemoActivity", "Name: " + entry.getName()); Log.d("XMPPChatDemoActivity", "Status: " + entry.getStatus()); Log.d("XMPPChatDemoActivity", "Type: " + entry.getType()); Presence entryPresence = roster.getPresence(entry.getUser()); Log.d("XMPPChatDemoActivity", "Presence Status: "+ entryPresence.getStatus()); Log.d("XMPPChatDemoActivity", "Presence Type: " + entryPresence.getType()); Presence.Type type = entryPresence.getType(); if (type == Presence.Type.available) Log.d("XMPPChatDemoActivity", "Presence AVIALABLE"); Log.d("XMPPChatDemoActivity", "Presence : " + entryPresence); } } catch (XMPPException ex) { Log.e("XMPPChatDemoActivity", "Failed to log in as "+ USERNAME); Log.e("XMPPChatDemoActivity", ex.toString()); setConnection(null); } dialog.dismiss(); } }); t.start(); dialog.show(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.chat, menu); return true; } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload