Java 从侦听器修改UI
最近我正在开发一个应用程序,它可以显示来自URL的视频流。连接到指定的WiFi后,应打开WebView,并播放视频 问题是,我需要检查我们是否使用了正确的WiFi,然后切换到新的活动。监听器,检查它是否正在创建自己的线程,并且不能修改UI。我试过RunNuithRead,但它仍然没有改变UI,我只是排除了异常。有办法让它工作吗?我的代码:Java 从侦听器修改UI,java,android,user-interface,Java,Android,User Interface,最近我正在开发一个应用程序,它可以显示来自URL的视频流。连接到指定的WiFi后,应打开WebView,并播放视频 问题是,我需要检查我们是否使用了正确的WiFi,然后切换到新的活动。监听器,检查它是否正在创建自己的线程,并且不能修改UI。我试过RunNuithRead,但它仍然没有改变UI,我只是排除了异常。有办法让它工作吗?我的代码: public class MainActivity extends AppCompatActivity { ... private Bool
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;
}
}
}
}
}
}
public类MainActivity扩展了AppCompatActivity{
...
私有布尔值mStatus=Boolean.FALSE;
私有连接处理器mConnectionStatus;
...
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
mcConnectionStatus=新的ConnectionHandler();
...
connectButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
惊人的加载屏幕();
连接摄像机(mWifiManager);
新线程(新连接状态()).start();
}
});
mConnectionStatus.AddConnectionyListener(新的ConnectionHandler.ConnectionyListener(){
@凌驾
更改后的公共无效(){
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
停止加载屏幕();
openWebView();
}
});
}
});
最终处理程序=新处理程序();
handler.postDelayed(新的Runnable(){
@凌驾
公开募捐{
如果(!mConnectionStatus.getStatus()){
停止加载屏幕();
Toast.makeText(getApplicationContext(),
“找不到摄像头。\n请确保摄像头已打开。”,
Toast.LENGTH_LONG).show();
}
}
}, 30000);
}
公共无效停止加载屏幕(){
connectButton.setAlpha(1.0f);
mTextView.setAlpha(1.0f);
mLoadingView.setVisibility(View.GONE);
}
...
私有void openWebView(){
Intent Intent=新的Intent(这是WebViewActivity.class);
星触觉(意向);
}
类ConnectivityStatus实现可运行{
@凌驾
公开募捐{
long startTime=System.currentTimeMillis();
if(ActivityCompat.checkSelfPermission(getApplicationContext(),Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予){
mPermissions=Boolean.FALSE;
}
WifiInfo WifiInfo=mWifiManager.getConnectionInfo();
如果(wifiInfo.getSupplicantState()==SupplicantState.COMPLETED){
而((System.currentTimeMillis()-startTime)<30000){
if(wifiInfo.getSSID()等于(mSsid)){
mConnectionStatus.setStatus(Boolean.TRUE);
打破
}
}
}
}
}
}
尝试使用来自的post()
方法。例如:
newhandler().post(runnable)
我应该从onChange()运行它吗?@PatrykWoźniak yes