Grundsätzlich habe ich eine Main-Klasse, die das gesamte Projekt ausführt. Der Code funktioniert einwandfrei, wenn die App jedoch nicht fokussiert ist, wird sie inaktiv. Ich habe mich gefragt, wie ich es machen würde. Eine, die beim Booten gestartet wird.aSmack als Service
Die App wird ein Einweg-Nachrichtensystem für Benachrichtigungen sein. I.E.
Desktop Client -> Openfire Server -> Android XMPP Service -> Storage (DB) -> Android GUI zur Anzeige
Wie ich gesagt habe, wird der Code arbeiten (Connect, Login, Receive) aber isn Es ist ein Dienst.
Ich könnte die BEEM-Quelle verwenden, aber es ist zu funktionsfähig und interlaced. Ich bin nach einem leichten Service.
Der Code:
public class MainActivity extends Activity {
public static final String HOST = "fire.example.com";
public static final int PORT = 5222;
public static final String SERVICE = "example.com";
public static final String USERNAME = "[email protected]";
public static final String PASSWORD = "mepass";
private XMPPConnection connection;
private ArrayList<String> messages = new ArrayList<String>();
private Handler mHandler = new Handler();
private ListView listview;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) this.findViewById(R.id.listMessages);
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("XMPPChatActivity ", " Text Recieved " + message.getBody() + " from " + fromName);
messages.add(message.getBody());
mHandler.post(new Runnable() {
public void run() {
setListAdapter();
}
});
}
}
}, filter);
}
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@SuppressLint("NewApi")
private void setListAdapter() {
ArrayAdapter<String> adapter = new ArrayAdapter<String>(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("XMPPChatActivity", "[SettingsDialog] Connected to "+connection.getHost());
} catch (XMPPException ex) {
Log.e("XMPPChatActivity", "[SettingsDialog] Failed to connect to "+ connection.getHost());
Log.e("XMPPChatActivity", ex.toString());
setConnection(null);
}
try {
connection.login(USERNAME, PASSWORD);
Log.i("XMPPChatActivity", "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<RosterEntry> entries = roster.getEntries();
for (RosterEntry entry : entries) {
Log.d("XMPPChatActivity", "--------------------------------------");
Log.d("XMPPChatActivity", "RosterEntry " + entry);
Log.d("XMPPChatActivity", "User: " + entry.getUser());
Log.d("XMPPChatActivity", "Name: " + entry.getName());
Log.d("XMPPChatActivity", "Status: " + entry.getStatus());
Log.d("XMPPChatActivity", "Type: " + entry.getType());
Presence entryPresence = roster.getPresence(entry.getUser());
Log.d("XMPPChatActivity", "Presence Status: "+ entryPresence.getStatus());
Log.d("XMPPChatActivity", "Presence Type: " + entryPresence.getType());
Presence.Type type = entryPresence.getType();
if (type == Presence.Type.available)
Log.d("XMPPChatActivity", "Presence AVIALABLE");
Log.d("XMPPChatActivity", "Presence : " + entryPresence);
}
} catch (XMPPException ex) {
Log.e("XMPPChatActivity", "Failed to log in as "+ USERNAME);
Log.e("XMPPChatActivity", ex.toString());
setConnection(null);
}
dialog.dismiss();
}
});
t.start();
dialog.show();
}
}
Also im Grunde, Wie mache ich dies ein Service