从侦听器修改UI



最近我正在开发应用程序,它显示来自URL的视频流。连接到指定的WiFi后,它应该打开WebView并流式传输视频。

问题是,我需要检查我们是否使用了正确的WiFi,然后切换到新的"活动"。侦听器,检查它是否正在创建自己的线程,并且不能修改UI。我试过运行OnUiThread,但它仍然没有改变UI,我只是去掉了Exceptions。有办法让它发挥作用吗?我的代码:

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;
}
}
}
}
}
}

尝试使用Handler中的post()方法。例如:

new Handler().post(runnable)

最新更新