0

我正在使用以下代码检查整个应用程序中的互联网连接。

public class UpdateReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        ConnectivityManager connectivityManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetInfo = connectivityManager
                .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        boolean isConnected = activeNetInfo != null
                && activeNetInfo.isConnectedOrConnecting();
        if (isConnected){
            Log.i("NET", "connecte" + isConnected);
        Toast.makeText(context, "net Connected", Toast.LENGTH_LONG)
        .show();
        }
        else{
            Log.i("NET", "not connecte" + isConnected);
        Toast.makeText(context, "No Internet Connection", Toast.LENGTH_LONG)
                .show();
        }
    }
}

问题是当他们没有互联网连接/wi-fi 信号时,toast 消息也会显示在其他应用程序中。我该如何避免这种情况?

谢谢:)

4

4 回答 4

0

很抱歉,没有一个答案实际上回答了最初的问题“...... toast 消息也显示在其他应用程序中......我该如何避免这种情况?”

无论哪个应用程序位于顶部,都会显示 Toast。它就是这样设计的。所以你不能'避免'。您必须避免使用 Tosat 来避免这种行为。接收器在后台运行并显示 Toast。它不会打扰当前正在向用户显示哪个应用程序。

也请检查此链接。 http://developer.android.com/guide/topics/ui/notifiers/toasts.html

于 2013-04-15T09:06:42.087 回答
0

使用 this 或 getBaseContext() 而不是 contex 。

于 2013-04-15T08:38:10.987 回答
0

您正在使用 BroadcastReceiver 接收器来检查是否有互联网连接。无论应用程序如何,只要网络连接发生变化,就会执行此操作。既然你是新人,那我就解释一下。

我们可以将广播接收器与侦听特定类型广播的收音机联系起来,而广播是在事件发生时由 android 系统发送的东西。所以如果事件是你的广播接收器的类型,你会得到它。

因此,如果您只需要检查连接,则可以从您的应用程序中简单地创建一个方法并调用它。

 public boolean isNetworkAvailable(Context context) {

    ConnectivityManager connectivityManager = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetInfo = connectivityManager
            .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
    boolean isConnected = activeNetInfo != null
            && activeNetInfo.isConnectedOrConnecting();
    if (isConnected){
        Log.i("NET", "connecte" + isConnected);
    Toast.makeText(context, "net Connected", Toast.LENGTH_LONG)
    .show();
    }
    else{
        Log.i("NET", "not connecte" + isConnected);
    Toast.makeText(context, "No Internet Connection", Toast.LENGTH_LONG)
            .show();
    }

return isConnected;
}

每当您需要检查连接时调用此方法。

或者

如果您需要按照上述要求获得上述事件更改的通知,您可以使用相同的广播接收器,而不是在清单文件中注册广播接收器,而是在应用程序启动时从应用程序代码中注册它,并在应用程序时取消注册它结束。

于 2013-04-15T08:41:54.670 回答
0

创建一个应用程序类:

public class MyApplication extends Application {
    private static MyApplication instance;

    // Returns the application instance 
    public static MyApplication getInstance() {
        if (instance == null)
            instance = this;
        return instance;
    }
}

添加到清单:

<application
        android:name=".MyApplication"
        ... >

在您的广播接收器中:

Toast.makeText(MyApplication.getInstance().getApplicationContext(), "No Internet Connection", Toast.LENGTH_LONG)
                .show();
于 2013-04-15T08:37:42.330 回答