Android: вызов действия из потока - PullRequest
0 голосов
/ 28 ноября 2010

Моя проблема, вероятно, будет простой и неудобной одновременно, но я немного застрял.

У меня есть класс Main.java, который расширяет Activity.

Внутрив этом классе я делаю следующее:

ringerServer = new Thread(new RingerServer());
ringerServer.start();

Я хочу, чтобы поток RingerServer работал непрерывно.

Внутри этого потока я слушаю соединение TCP.Если я получу один, я запускаю другой класс, который отправляет и получает пакет 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, но он не жалуется, поскольку является Thread, он не знает о классе Activity, потому что он не расширяет его, но реализует Runnable.

Я не уверен, как могузаставить мою программу продолжать работу RingerServer, но основной поток должен перейти в класс VoIPCall.Есть идеи, пожалуйста?

Я очень ценю вашу помощь.

Большое спасибо,

Джари

1 Ответ

1 голос
/ 28 ноября 2010

Вы должны переместить свою ветку в Сервис , а не в Activity.Я рекомендую начать с прочтения раздела Процессы и потоки Руководства по Android.Затем ознакомьтесь с документацией по API для Service , которая поможет вам приступить к ее созданию.

...