[英]Result error using BroadCast Receiver
我目前正在使用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方法
要檢查是否有Internet,可以使用以下代碼:
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;
}
如果存在Internet,則此代碼返回true;否則,則返回false。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.