Изменить интерфейс от слушателя - PullRequest
0 голосов
/ 02 марта 2020

В последнее время я работаю над приложением, которое показывает поток видео с URL. После подключения к указанному Wi-Fi он должен открыть WebView и запустить потоковое видео.

Проблема в том, что мне нужно проверить, правильно ли мы используем WiFi, а затем переключиться на новую активность. Слушатель, который проверяет, создает ли он собственный поток, и не может изменять пользовательский интерфейс. Я пытался запустить runOnUiThread, но он по-прежнему не меняет пользовательский интерфейс, я просто избавляюсь от исключений. Есть ли способ заставить его работать? Мой код:

public class MainActivity extends AppCompatActivity {

    ...
    private Boolean mStatus = Boolean.FALSE;
    private ConnectionHandler mConnectionStatus;
    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ...
        mConnectionStatus = new ConnectionHandler();
        ...


        connectButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startLoadingScreen();
                connectToCamera(mWifiManager);
                new Thread(new ConnectivityStatus()).start();
            }
        });

        mConnectionStatus.addConnectivityListener(new ConnectionHandler.ConnectivityListener() {
            @Override
            public void onChange() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        stopLoadingScreen();
                        openWebView();
                    }
                });
            }
        });

        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                if(!mConnectionStatus.getStatus()){
                    stopLoadingScreen();
                    Toast.makeText(getApplicationContext(),
                            "Camera not found.\nMake sure that camera is turned on.",
                            Toast.LENGTH_LONG).show();
                }
            }
        }, 30000);
    }

    public void stopLoadingScreen() {
        connectButton.setAlpha(1.0f);
        mTextView.setAlpha(1.0f);
        mLoadingView.setVisibility(View.GONE);
    }

    ...

    private void openWebView() {
        Intent intent = new Intent(this, WebViewActivity.class);
        startActivity(intent);
    }

    class ConnectivityStatus implements Runnable{
        @Override
        public void run(){

            long startTime = System.currentTimeMillis();
            if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                mPermissions = Boolean.FALSE;
            }
            WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
            if (wifiInfo.getSupplicantState() == SupplicantState.COMPLETED) {
                while ((System.currentTimeMillis() - startTime) < 30000) {
                    if (wifiInfo.getSSID().equals(mSsid)) {
                        mConnectionStatus.setStatus(Boolean.TRUE);
                        break;
                    }
                }
            }
        }
    }

}

1 Ответ

0 голосов
/ 02 марта 2020

Попробуйте использовать post() метод из Обработчик . Например:

new Handler().post(runnable)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...