私はAndroidアプリケーションを開発しています。
このアプリケーションには、サーバーとして DatagramSocket を開始するためのサーバーがあります。着信メッセージを待ちます。ソケットがメッセージを受け取ると、それを処理します。
UDP サーバー ソケットを開始するには、ローカル サービスを使用します。このサービスには、着信メッセージをリッスンするワーカー スレッドがあります。
これは私の未完成のローカル サービスの実装です。
public class UDPSocketBackgroundService extends Service
{
private static final String TAG = "UDPSocketBackgroundService";
private ThreadGroup myThreads = new ThreadGroup("UDPSocketServiceWorker");
private Handler mServiceHandler;
@Override
public void onCreate()
{
super.onCreate();
Log.v(TAG, "in onCreate()");
}
@Override
public IBinder onBind(Intent arg0)
{
try
{
new Thread(myThreads, new UDPServerThread("X", 8888)).start();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
そして、これも未完成のワーカー スレッドの実装です。
public class UDPServerThread extends Thread
{
private static final int MESSAGE_SIZE = 256;
protected DatagramSocket socket = null;
protected boolean end = false;
public UDPServerThread(String serverName, int port) throws IOException
{
super(serverName);
socket = new DatagramSocket(port);
}
public void run()
{
while (!end)
{
try
{
byte[] buf = new byte[MESSAGE_SIZE];
// Wait an incoming message.
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
// TODO: Notify Service with packet received
}
catch (IOException e)
{
// TODO Mensaje de error.
e.printStackTrace();
}
}
}
}
これらのクラスには独自のファイルがあります (それらは別のファイルにあります)。
ここ:
socket.receive(packet);
//TODO: Notify Service with packet received
パケットを受信したことをサービスに通知するにはどうすればよいですか? そのパケットもサービスに送りたいです。
メイン スレッドからワーカー スレッドに通信する方法の例を次に示します。しかし、それは必要ありません。ワーカー スレッドからサービスに通信する方法の例を探しています。
この例を見つけましたが、その例では両方のクラスが同じファイルで宣言しているため、よくわかりません。
ご覧のとおり、私は Android 開発の初心者です。
より良いアプローチを知っている場合は、教えてください。