В последнее время я работаю над приложением, которое показывает поток видео с 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;
}
}
}
}
}
}