私のアプリでは、チャットに XMPP を使用しています。これでは、XMPP サーバーからデータベースにすべての連絡先をダウンロードするサービスを作成する必要があります。私は今、以下のコードのようにやっています.すべての連絡先を取得するには時間がかかります. このため、サービスを使用してこのジョブをバックグラウンドで実行し、DB に保存したいと考えています。データベースに新しい連絡先がある場合は、プロバイダーを使用して連絡先を更新します。
サービスの作成方法は知っていますが、ここでは名簿や XMPP 接続などのパラメーターをサービスに渡すことができません。これらのパラメーターは、XMPP サーバーから連絡先をダウンロードするために必要です。この問題を解決する方法を教えてください。これは私が今使っているコードです。
public class GmailXmppClient {
public GmailXmppClient(ChatAccountsFragment _fragment, Context _context) {
this.fragment = _fragment;
this.context = _context;
ConnectionConfiguration config = new ConnectionConfiguration(server_host, SERVER_PORT, SERVICE_NAME);
m_connection = new XMPPConnection(config);
try {
m_connection.connect();
} catch (XMPPException e) {
e.printStackTrace();
}
}
public Roster getRoster() {
Log.i(TAG, " getRoster ");
return m_connection.getRoster();
}
public boolean Login(String uname, String pass ) throws XMPPException {
m_connection.login(uname, pass);
this.fragment.Gtalk_logInComplete(uname, m_connection);
this.setPacketFilters();
Presence presence = new Presence(Presence.Type.available);
Log.i("ID", "" + presence);
m_connection.sendPacket(presence);
return true;
}
public void disconnect() {
m_connection.disconnect();
}
}
このコードの後の上記のコードから
this.fragment.Gtalk_logInComplete(uname, m_connection);
このコードは、xmpp サーバーから連絡先を取得するために実行されます
private void getConts() {
Roster roster = colors_xmpp_client.getRoster();
String file_name;
for (RosterEntry entry : roster.getEntries()) {
if (entry.getType() == ItemType.to || entry.getType() == ItemType.both) {
boolean yes = Contact_data_source.checkUsername(entry.getUser());
Log.i(TAG, "Con=" + yes);
if (!yes) {
String na = entry.getUser();
String[] me = na.split("@");
Bitmap buddy_img = buddyImage(entry, _connection);
if (buddy_img != null)
file_name = Store(buddy_img);
else
file_name = "";
if (entry.getName() == null)
Contact_data_source.createContact( entry.getUser(), entry.getUser(), Uname, file_name, UsedStrings.SipAccount, me[0] );
else
Contact_data_source.createContact( entry.getName(), entry.getUser(), Uname, file_name, UsedStrings.SipAccount, me[0] );
} else {
Log.i(TAG, "Con=exist");
}
}
}
return null;
}