J'essaie d'accéder à une connexion socket de ma classe de service dans ma classe d'activité et emit
ting données à mon serveur en ligne.Accès à une connexion socket à partir d'une classe de service dans une activité
MyService.java
public class MyService extends Service {
@Override
public IBinder onBind(Intent Intent)
{
return null;
}
@Override
public void onCreate() {
this.isRunning = false;
this.backgroundThread = new Thread(myTask);
}
private Runnable myTask = new Runnable() {
@Override
public void run() {
try {
// instantiate socket connection
mSocket = IO.socket(AppConstants.CHAT_SERVER_URL);
// establish the socket connection
mSocket.connect();
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
}
};
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(!this.isRunning) {
this.isRunning = true;
this.backgroundThread.start();
}
return START_STICKY;
}
public Socket getSocket() {
return mSocket;
}
}
MyApplication.java
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Intent background = new Intent(this, MyService.class);
startService(background);
}
}
MainActivity.java
public class MainActivity extends Activity {
Socket mSocket;
MyService mservice;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mSocket = mservice.getSocket();
}
public void sendMessage(View view){
mSocket.emit("new messaged", "this");
}
}
Le ci-dessus donne une erreur nulle, lorsque la méthode sendMessage
dans le MainActivity
est déclenchée, même si la connexion est établie au démarrage.
Je sais très bien que, je peux bind
connexion et utiliser la classe ServiceConnection
dans la classe d'activité pour accéder à la connexion mSocket
, mais je suis d'utiliser cette manière ou d'une broadcast receiver
pour y accéder. Toutes les idées sur le meilleur pour accéder à la connexion de socket sans limite de classe de service à la classe d'activité.
Je viens d'accéder à la méthode 'getSocket()' de la classe Service, et dans cette classe il a déjà été défini, de toute façon pouvez-vous suggérer un meilleur moyen pour cela – George
vous devez d'abord régler 'mservice' sur quelque chose avant de pouvoir appeler 'getSocket()' dessus! –