Consegui estabelecer uma conexão com servidor (NODE.js) via Socket.IO, mas quando encerro a aplicação no modo aplicativos recentes, o Socket desconecta. Pra resolver tentei enviar uma ação para o Broadcast, apartir do metodos onDestroy() e onTaskRemoved() da classe Service, mesmo estando tudo declarado no manifest, não tá dando certo. Alguém já viu algo parecido? que possa me ajudar?
package infinity.android.com.myproguia;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import io.socket.client.Socket;
public class SocketService extends Service {
private Socket mSocket;
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Intent intent = new Intent("SOCKET_EVENT");
sendBroadcast(intent);
Log.d("------>","destroy");
}
@Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
Intent intent = new Intent("SOCKET_EVENT");
sendBroadcast(intent);
Log.d("------>","task_removed");
}
}
//manifest
<receiver android:name="infinity.android.com.myproguia.BroadCastSocket"
android:label="BroadCastSocket">
<intent-filter>
<action android:name="SOCKET_EVENT" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
//broadcast
package infinity.android.com.myproguia;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import io.socket.client.Socket;
/**
-
Created by djavan on 23/03/17.
*/
public class BroadCastSocket extends BroadcastReceiver {private Context context;
@Override
public void onReceive(Context context, Intent intent) {//intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); if(intent.getAction()==intent.ACTION_CLOSE_SYSTEM_DIALOGS){ // Toast.makeText(context, "FECHOU!", Toast.LENGTH_SHORT).show(); } context.startService(new Intent(context, SocketService.class)); //Toast.makeText(context, "FECHOU!", Toast.LENGTH_SHORT).show(); ConnectivityManager conectivtyManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if (conectivtyManager.getActiveNetworkInfo() != null && conectivtyManager.getActiveNetworkInfo().isAvailable() && conectivtyManager.getActiveNetworkInfo().isConnected()) { mySocket = new SocketConnection(context); mySocket.updateSocket(); //context.registerReceiver(this, intentFilterACSD); }
}
}
//socket
package infinity.android.com.myproguia;
import android.content.Context;
import android.util.Log;
import android.widget.Toast;
import org.json.JSONException;
import org.json.JSONObject;
import java.net.URISyntaxException;
import io.socket.client.IO;
import io.socket.client.Socket;
import io.socket.emitter.Emitter;
/**
-
Created by djavan on 24/06/17.
*/
public class SocketConnection {public Socket mSocket;
private Context context;public SocketConnection(Context context) {
this.context = context;
}public void updateSocket() {
try { mSocket = IO.socket(WellcomeActivity.URL_SOCKET); } catch (URISyntaxException e) { Log.d("socket: ","nada conectado"); } //new SocketAsyncTask().execute(); //mSocket.on("bem_vindo",onNewMessage); mSocket.on(Socket.EVENT_CONNECT, new Emitter.Listener() { @Override public void call(Object... args) { JSONObject json = new JSONObject(); try { json.put("login", "juliao"); } catch (JSONException e) { e.printStackTrace(); } mSocket.emit("join", json); System.out.println("SOCKET CONECTADO"); } }).on("notificacao",new Emitter.Listener() { @Override public void call(Object... args) { final String msn = (String) args[0]; Log.d("chegou msn",""+msn); } }); mSocket.connect(); if(mSocket.connected()){ Toast.makeText(context, "FECHOU!", Toast.LENGTH_SHORT).show(); }else{ if(!mSocket.connected()){ Toast.makeText(context, "FECHOU!", Toast.LENGTH_SHORT).show(); System.out.println("SOCKET DISCONECTADO"); } }
}
}