私の問題は、おそらく、同時に簡単で厄介なものになるだろうが、私はちょっと立ち往生している。Android:スレッドからアクティビティを呼び出す
私はActivityを拡張するMain.javaクラスを持っています。そのクラス内
、私は次の操作を行います
ringerServer = new Thread(new RingerServer());
ringerServer.start();
は、私は何をしたいRingerServerスレッドが継続的に実行されています。
そのスレッドの中で、私はTCP接続を待ち受けます。私が1つを取得すると、私はUDPパケットを送受信する別のクラスを開始します。
public class RingerServer implements Runnable {
public static final int SERVERPORT = 4445; // Default port to connect to
@Override
public void run() {
try {
// Create a socket for handling incoming requests
ServerSocket server = new ServerSocket(SERVERPORT);
while (!VoIPCall.onCall) {
// Wait for an incoming connection
Socket clientSocket = server.accept();
// TODO: Display a message for the user to accept or decline
// For now, automatically accept the call
Intent myIntent = new Intent(null, VoIPCall.class);
// Put the IP as a parameter
myIntent.putExtra("inetAddress", clientSocket.getInetAddress());
startActivity(myIntent);
}
} catch (IOException e) {
Log.e("TCP", "S: Error", e);
}
}
}
私の問題は、ラインに関係しています:
Intent myIntent = new Intent(null, VoIPCall.class);
myIntent.putExtra("inetAddress", clientSocket.getInetAddress());
startActivity(myIntent);
それらのラインが活動内で正常に動作しますが、それはそれはスレッドがあるとして、それは知りません文句をしませんActivityクラスは、それを拡張しないため、Runnableを実装しているためです。
私のプログラムでRingerServerがどのように動作するのかよく分かりませんが、メインスレッドはVoIPCallクラスに移動してください。どんなアイデアですか?
本当にありがとうございます。
あなたはむしろ活性よりもServiceにあなたのスレッドを移動する必要があります
Jary
コードの1つの問題は、コンテキストとしてnullをインテントに渡すことです。その呼び出しが機能するには、実際のContextオブジェクトを渡す必要があります。あなたのスレッドを別のクラスにしたいのであれば、恐らくContextを引数として持つコンストラクタを作成するべきでしょう。アクティビティまたはサービスのインスタンスで、スレッドをインスタンス化してコンストラクタに渡すことができます。 – elevine