通知也会在其他应用中显示

时间:2013-04-15 08:23:20

标签: android

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

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信号时,吐司消息也在其他应用程序中显示...我该如何避免?

感谢:)

4 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

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

答案 2 :(得分: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;
}

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

OR

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

答案 3 :(得分:0)

我很遗憾地说,没有一个答案实际上回答了原来的问题“......吐司消息也在其他应用程序中显示......我该如何避免?”

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

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