java - 使用广播接收器的结果错误

标签 java android

我目前正在android中开发网络爬行

我有一个代码来检查是否有互联网连接

但是如果我打开移动网络,应用程序突然错误想要强制关闭 这是一些代码:

package thesis.carlo;

@Override
protected void onHandleIntent(Intent intent) {
    // TODO Auto-generated method stub

    receiver = new ConnectivityReceiver();
    registerReceiver(receiver, new IntentFilter(
            ConnectivityManager.CONNECTIVITY_ACTION));



    Notification note = new Notification(R.drawable.target, "Crawling", System.currentTimeMillis());
    Intent i = new Intent(this, LoadingActivity.class);

    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
            | Intent.FLAG_ACTIVITY_SINGLE_TOP);

    PendingIntent pi = PendingIntent.getActivity(this, 0, i, 0);

    note.setLatestEventInfo(this, "Focused Crawling","In Progress Crawling...", pi);
    note.flags |= Notification.FLAG_NO_CLEAR;

    startForeground(1337, note);


    this.crawls(resultMap, keywords);

    stopForeground (true);

    this.showResult(urlsList, valueList);
    result = Activity.RESULT_OK;


}


public void showResult(List urlList, List valList) {

    Intent i = new Intent(this, ResultActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    i.putStringArrayListExtra("urlsList", (ArrayList<String>) urlList);
    i.putParcelableArrayListExtra("valueList",
            (ArrayList<? extends Parcelable>) valList);
    startActivity(i);
}

private String getNetworkStateString(NetworkInfo.State state) {
    String stateString = "Unknown";

    switch (state) {
    case CONNECTED:
        stateString = "Connected";
        break;
    case CONNECTING:
        stateString = "Connecting";
        break;
    case DISCONNECTED:
        stateString = "Disconnected";
        break;
    case DISCONNECTING:
        stateString = "Disconnecting";
        break;
    case SUSPENDED:
        stateString = "Suspended";
        break;
    default:
        stateString = "Unknown";
        break;
    }

    return stateString;
}

public void onDestroy() {
    unregisterReceiver(receiver);

    super.onDestroy();
}

private class ConnectivityReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        NetworkInfo info = intent
                .getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);

        if (null != info) {
            String state = getNetworkStateString(info.getState());
            String stateString = info.toString().replace(',', '\n');

            Log.i("ConnTest", info.getTypeName());
            Log.i("ConnTest", state);
            Log.i("ConnTest", info.toString());

            if(state.equals("Disconnected")){
                stop();
            }

        }
    }
}

public void stop(){
    stopService(new Intent(this, CrawlingActivityService.class));
    startActivity(new Intent(this, ErrorActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
    stopForeground (true);
}

}

我不知道为什么当我关闭移动网络时 onReceive 方法没有调用

最佳答案

要检查互联网是否存在,您可以使用以下代码:

public static Boolean isOnline(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    if (netInfo != null && netInfo.isConnectedOrConnecting()) {
        return true;
    }
    return false;
}

如果存在互联网,则此代码返回 true,如果不存在,则返回 false。

关于java - 使用广播接收器的结果错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8668546/

相关文章:

java - 如何将有效输入添加到数组列表中?

java - 在 Maven 测试上生成数据库架构(Hibernate)

android - 检测应用程序何时关闭

android - 通知的 Intent

java - 如何将四个 Sprite 旋转到这些 Sprite 的焦点

android - Activity 生命周期 - 声明顺序的重要性

java - FileWriter 中的\r\n 表示下一行

java - 常量及其单位的命名约定

java - 如何为我的 GeoTools 项目找到正确的 Java 11 模块名称?

android - 将 webview 嵌入到 youtube 视频中