Форум для тех, кто программирует под Android
Anonymous
Как установить соединение WebSocket в службе Android?
Сообщение
Anonymous » 07 фев 2026, 13:07
Я пытался создать службу Android, которая позволила бы мне поддерживать соединение через веб-сокет и время от времени отправлять некоторые данные. Я создаю обработчик в службе для подключения к WebSocketClient. Но оно не подключается. URL-адрес работает, и я тоже его проверил. Буду очень признателен, если кто-нибудь сможет помочь.
Main Activity.java
Код: Выделить всё
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BroadcastReceiver receiver=new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
TextView text=(TextView) findViewById(R.id.textView);
text.setText(intent.getStringExtra("msg"));
}
};
registerReceiver(receiver, new IntentFilter(SocketService.BROADCAST_ACTION));
}
// Method to start the service
public void startService(View view) {
startService(new Intent(getBaseContext(), SocketService.class));
}
// Method to stop the service
public void stopService(View view) {
stopService(new Intent(getBaseContext(), SocketService.class));
}
}
Внедрение услуг
Код: Выделить всё
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import java.net.URI;
import java.util.logging.LogRecord;
public class SocketService extends Service {
boolean status=false;
public static final String BROADCAST_ACTION = "com.supun.broadcasttest";
BroadcastReceiver broadcaster;
BroadcastReceiver broadreciever;
Intent intent;
Handler handler;
WebSocketClient client;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
intent=new Intent(BROADCAST_ACTION);
handler=new Handler();
}
@Override
public int onStartCommand(final Intent intent, int flags, int startId) {
Toast.makeText(this, "Service Started",Toast.LENGTH_LONG).show();// Let it continue running until it is stopped.
////////////////////////////////////////////////////////////////////////////////
try {
client = new WebSocketClient(new URI(
"ws://xxxxxxx-xxxx.rhcloud.com:8000/browser")) {
@Override
public void onOpen(ServerHandshake handshakedata) {
Log.d("1", "open");
status = true;
}
@Override
public void onMessage(String message) {
Log.d("reply", message);
intent.putExtra("msg", message);
sendBroadcast(intent);
}
@Override
public void onError(Exception ex) {
// TODO Auto-generated method stub
}
@Override
public void onClose(int code, String reason, boolean remote{
status = false;
}
};
}catch(Exception e){
}
///////////////////////////////////////////////////////////////////////////////
//
handler.removeCallbacks(runnable);
handler.postDelayed(runnable, 1000);
return START_STICKY;
}
private Runnable runnable=new Runnable() {
@Override
public void run() {
client.connect();
for(int i=0; i
Подробнее здесь: [url]https://stackoverflow.com/questions/31476344/how-to-establish-a-websocket-connection-in-android-service[/url]
1770458865
Anonymous
Я пытался создать службу Android, которая позволила бы мне поддерживать соединение через веб-сокет и время от времени отправлять некоторые данные. Я создаю обработчик в службе для подключения к WebSocketClient. Но оно не подключается. URL-адрес работает, и я тоже его проверил. Буду очень признателен, если кто-нибудь сможет помочь. Main Activity.java [code]import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.view.View; import android.widget.TextView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); BroadcastReceiver receiver=new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { TextView text=(TextView) findViewById(R.id.textView); text.setText(intent.getStringExtra("msg")); } }; registerReceiver(receiver, new IntentFilter(SocketService.BROADCAST_ACTION)); } // Method to start the service public void startService(View view) { startService(new Intent(getBaseContext(), SocketService.class)); } // Method to stop the service public void stopService(View view) { stopService(new Intent(getBaseContext(), SocketService.class)); } } [/code] Внедрение услуг [code]import android.app.Service; import android.content.BroadcastReceiver; import android.content.Intent; import android.os.Handler; import android.os.IBinder; import android.util.Log; import android.widget.Toast; import org.java_websocket.client.WebSocketClient; import org.java_websocket.handshake.ServerHandshake; import java.net.URI; import java.util.logging.LogRecord; public class SocketService extends Service { boolean status=false; public static final String BROADCAST_ACTION = "com.supun.broadcasttest"; BroadcastReceiver broadcaster; BroadcastReceiver broadreciever; Intent intent; Handler handler; WebSocketClient client; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); intent=new Intent(BROADCAST_ACTION); handler=new Handler(); } @Override public int onStartCommand(final Intent intent, int flags, int startId) { Toast.makeText(this, "Service Started",Toast.LENGTH_LONG).show();// Let it continue running until it is stopped. //////////////////////////////////////////////////////////////////////////////// try { client = new WebSocketClient(new URI( "ws://xxxxxxx-xxxx.rhcloud.com:8000/browser")) { @Override public void onOpen(ServerHandshake handshakedata) { Log.d("1", "open"); status = true; } @Override public void onMessage(String message) { Log.d("reply", message); intent.putExtra("msg", message); sendBroadcast(intent); } @Override public void onError(Exception ex) { // TODO Auto-generated method stub } @Override public void onClose(int code, String reason, boolean remote{ status = false; } }; }catch(Exception e){ } /////////////////////////////////////////////////////////////////////////////// // handler.removeCallbacks(runnable); handler.postDelayed(runnable, 1000); return START_STICKY; } private Runnable runnable=new Runnable() { @Override public void run() { client.connect(); for(int i=0; i Подробнее здесь: [url]https://stackoverflow.com/questions/31476344/how-to-establish-a-websocket-connection-in-android-service[/url]