【问题标题】:Toast not displayed after Internet is Turned On开启 Internet 后不显示 Toast
【发布时间】:2014-07-02 18:13:56
【问题描述】:

在我的OnCreate 方法中,我正在检查我的 Internet 连接。如果没有 Internet 连接,我将显示一个对话框,说明“用户没有 Internet”。现在打开 Internet 后,我​​希望再次调用 onCreate 并重新创建活动。

请注意:我是通过Android顶部栏的下拉菜单直接打开Wifi来开启互联网的。我怎样才能做到这一点?我是否应该创建一个广播接收器,因为在执行此操作时没有调用 OnResumeOnRestart

请帮忙。

这是我的网络检查类

public class NetWorkCheck {

    public NetWorkCheck(){

    }

    public static boolean hasConnection() {
        ConnectivityManager cm = (ConnectivityManager) Getit.getContext().getSystemService(
            Context.CONNECTIVITY_SERVICE);

        NetworkInfo wifiNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        if (wifiNetwork != null && wifiNetwork.isConnected()) {
          return true;
        }

        NetworkInfo mobileNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        if (mobileNetwork != null && mobileNetwork.isConnected()) {
          return true;
        }

        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        if (activeNetwork != null && activeNetwork.isConnected()) {
          return true;
        }

        return false;
      }
}

这绝对是完美的。

在我的onCreate 中,我正在这样做

net = new NetWorkCheck();

if(net.hasConnection()){
    Do task
}else{
    Show dialog //I want this dialog to be vanished when user switched on the wifi.and activity should be re created
}

更新 2

目前,我正在使用一个广播接收器。

我在这样的对话框之后拨打电话:->

     else{
        new InternetNetworkHandle(SplashActivity.this).show();
        registerReceiver(                   
                      new ConnectivityChangeReceiver(SplashActivity.class),                     
                      new IntentFilter(                 
                            ConnectivityManager.CONNECTIVITY_ACTION));


    }

广播接收器类

  public class ConnectivityChangeReceiver 
    extends BroadcastReceiver {

        String classname;

        public ConnectivityChangeReceiver(String classname){
            this.classname = classname;
        }

        @Override
        public void onReceive(Context context, Intent intent) {     
            ConnectivityManager conMan = (ConnectivityManager)     context.getSystemService(Context.CONNECTIVITY_SERVICE); 
            NetworkInfo netInfo = conMan.getActiveNetworkInfo();
            if (netInfo != null && netInfo.getType() == ConnectivityManager.TYPE_WIFI) {
                Log.d("WifiReceiver", "Have Wifi Connection");
               act.finish();
               Intent refresh = new Intent(context, ???); :-> Here how can i give my that activity name ? and i don't want hardcode.
               startActivity(refresh);

            }
            else
                Log.d("WifiReceiver", "Don't have Wifi Connection");    
        }   
    };

【问题讨论】:

  • 你在标题中提到的 Toast 在哪里?
  • if(!net.hasConnection()){ 我正在展示 Toast }
  • 请理解问题。我想在打开网络后重新创建活动。 !!有可能吗??
  • 从APIv11开始可以调用Activity.recreate();
  • 如果我也使用 11.我应该在哪里写 Activity.recreate ??

标签: android android-activity oncreate


【解决方案1】:

这个link 应该准确地向您展示如何注册互联网状态更改意图。这将使您连接起来,您将能够收听该事件。

您可以将广播接收器放在 Activity 类中,并使用 getApplicationContext() 来获取 Activity 的引用。

在事件内部,您希望执行其中一项来刷新您的活动。

您可以尝试刷新您的活动:

Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();

或者这个:

finish();
startActivity(getIntent());

从这里: Reload activity in Android

你可以这样称呼它:

net = new NetWorkCheck();

if(net.hasConnection()){
    Do task
}else{
    finish();
    startActivity(getIntent());
}

net = new NetWorkCheck();

if(net.hasConnection()){
    Do task
}else{
    Intent refresh = new Intent(this, clsMainUIActivity.class);
    startActivity(refresh);
    this.finish();
}

【讨论】:

  • 请谅解。我不想完成活动!活动应该在那里,我想要的唯一改变是当互联网连接在那里时,活动应该被称为 onCreate。
  • 我不确定你是否可以调用你的 onCreate 方法。您可以尝试这样做,但我建议您不要这样做。最好的选择是“刷新”将导致 onCreate 方法被调用的活动。
  • 假设我选择这个@Override protected void onResume() { super.onResume(); this.onCreate(null); } 但是 .. 不幸的是,当我打开我的 Wifi 时,我的 onResume 没有被调用:(
  • 打开 Wifi 时不应调用 onResume。 onResume 在活动开始/恢复时调用 - 即用户可以开始与活动交互的时间。 “onResume() 在 Activity 开始与用户交互时调用。此时,您的 Activity 位于 Activity 堆栈的顶部,用户输入会转到它。始终跟在 onPause() 之后。” developer.android.com/reference/android/app/Activity.html
  • 是的,你是对的。那么我怎样才能触发 onCreate 呢?我如何通知“Wifi”已打开的活动?这是我的目标!!!
【解决方案2】:

试试这个....

finish();
startActivity(getIntent());

或者你可以使用

Activity.recreate();

如果您的目标是 API11 或更高版本

【讨论】:

  • 我应该在哪里写 Activity.recreate ??
  • 我会坚持使用 API11 之前的版本。
猜你喜欢
  • 2021-03-16
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 2014-07-04
  • 2015-06-15
相关资源
最近更新 更多