【问题标题】:Broadcast onReciever calls multiple times and it giving Source not found exception广播 onReciever 多次调用,它给 Source not found 异常
【发布时间】:2014-04-29 17:40:31
【问题描述】:

当启用 Wifi 连接或移动数据连接时,我会在我的应用程序中进行通知。但我的 onReciever 方法多次调用并且它给出“找不到源异常”。但在我的 logcat 中它没有打印任何异常。只有调试时间我发现异常。在调试时 onReciever 方法结束 tat 调试器返回“未找到源异常”。

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

    System.out.println("Network change reciever started");      
    String status = NetworkUtil.getConnectivityStatusString(context);
    Toast.makeText(context, status, Toast.LENGTH_LONG).show();
}

当 onReciever 调用我的 syso 时,在 logcat 和 toas cams 中打印 4 次。为什么?

我的代码有什么问题?

清单:

<receiver
        android:name="com.electrical.coc.nz.automaticserversync.NetworkChangeReceiver"
        android:enabled="true"
        android:label="NetworkChangeReceiver" >
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
        </intent-filter>
    </receiver>

更新 1#

public class NetworkUtil {

public static int TYPE_WIFI = 1;
public static int TYPE_MOBILE = 2;
public static int TYPE_NOT_CONNECTED = 0;

public static int getConnectivityStatus(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (null != activeNetwork) {
        if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
            return TYPE_WIFI;

        if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
            return TYPE_MOBILE;
    }
    return TYPE_NOT_CONNECTED;
}

public static String getConnectivityStatusString(Context context) {
    int conn = NetworkUtil.getConnectivityStatus(context);
    String status = null;
    if (conn == NetworkUtil.TYPE_WIFI) {
        status = "Internet connection enabled";
    } else if (conn == NetworkUtil.TYPE_MOBILE) {
        status = "Internet connection enabled";
    } else if (conn == NetworkUtil.TYPE_NOT_CONNECTED) {
        status = "Internet connection disabled";
    }
    return status;
}
}

【问题讨论】:

  • 添加 logcat 详细信息
  • 在我的 logcat 中没有打印任何内容,但在调试时,调试器将 ActivityThread.handleReceiver(ActivityThread$ReceiverData) line: 2436 放入此页面并显示 Source not found
  • 03-22 12:24:53.907:I/System.out(4298):网络更改接收器已启动03-22 12:24:53.907:I/System.out(4298):网络更改接收器started03-22 12:24:53.907: I/System.out(4298): 网络更改接收器已启动03-22 12:24:53.907: I/System.out(4298): 当 onReciever 调用它时,网络更改接收器在我的 logcat 中启动打印此消息四次

标签: android exception broadcastreceiver network-connection


【解决方案1】:

您的各种网络连接(3G、WiFi)可能都在转换不同的状态,并且每个都会触发一个更改事件。您需要在接收器中添加更多逻辑来确定新的网络状态。查看this page 了解更多信息。

【讨论】:

  • 是的,完全正确。我在 NetworkUtil 类中完成了这项检查。字符串状态 = NetworkUtil.getConnectivityStatusString(context);当我的 onReciever 调用 NetworkUtil 类被调用并从该类中获取状态时,这些验证在 getConnectivityStatusString(Context context) 方法中完成。
  • 那么我不确定我是否理解您需要帮助的问题。
  • 请检查我的更新#1。在这里我添加了我的 NetworkUtil 类。一旦您集成了此代码并将调试器放入 onRecieve 方法并将其关闭并打开您的 wifi 或移动数据连接,您就可以放心了你的调试器进入 onReciever 然后你降级直到 onRecieve 方法结束。现在你明白我面临什么问题拜托..
【解决方案2】:

试试这个代码:

if (null != activeNetwork && activeNetwork.isConnected()) {

isConnected() : Indicates whether network connectivity exists and it is possible to
establish connections and pass data.
Always call this before attempting to perform data transactions.

检查这个link 告诉如何调试Source not found exception

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 2021-02-17
    • 2018-08-22
    • 2017-03-25
    • 2017-05-26
    • 1970-01-01
    • 2012-09-20
    相关资源
    最近更新 更多