網絡設置這塊在手機應用裡面是非常重要的一塊,因為一般應用都需要和外部網絡做交互的。本篇文章就展示了一個比較經典應用場景。比如我最近在開發的轉賬應用。這個是需要和網絡交互的。當用戶打開應用之後,應用首先會判斷用戶是否已經打開wifi或者gprs網絡。沒有則跳轉到系統的無線和網絡設置界面,當用戶設置好了之後,我這裡做了一個更人性化的處理,創建了一個廣播接收器,因為我們知道,手機在打開網絡或者收到短信的時候,都會對外發布一條廣播。一旦網絡連接上了之後,我的這個廣播接收器,就會收到信息,然後判斷當前的轉賬應用是否是打開的狀態,打開了之後,就自動跳轉到轉賬應用。等於幫用戶重新打開了應用了,免去用戶關閉之前的應用重新打開的操作了。好,下面開始我們的實驗。
新建網絡操作類NetWorkUtil.java
package com.snda.wallet.utils;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Vibrator;
import com.snda.wallet.R;
/**
*
網絡設置類
* @author zhuzhifei
*/
public class NetWorkUtil {
public NetWorkUtil() {
}
/**
* 判斷網絡是否連通
*
* @param context
* @return
*/
public static boolean checkNetworkStatus(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
return (activeNetInfo == null) ? false : true;
}
/**
* 彈出提示框,告知用戶當前沒有連接網絡,點設置跳轉到網絡設置頁面,點取消關閉對話框
* @param context
*/
public static void showNetWorkStatus(final Context context) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("提示信息").setMessage(R.string.network_confirm).setCancelable(false)
.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);
context.startActivity(intent);
}
}).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
}).show();
Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(new long[] { 5, 12, 9, 19 }, -1);
}
}
注意記得加權限
新建網絡狀態廣播接收器NetWorkStateReceiver.java
/**
*
*/
package com.snda.wallet.network;
import java.util.List;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.NetworkInfo.State;
import android.widget.Toast;
import com.snda.wallet.tabs.TransferMainActivity;
import com.snda.wallet.utils.LogUtils;
/**
* 網絡狀態廣播接收器
* @author zhuzhifei
*
*/
public class NetWorkStateReceiver extends BroadcastReceiver {
private String tag = "NetWorkStateReceiver";
/*
* 廣播接收器,接收手機已經連上網絡的廣播
*/
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
//判斷網絡狀態
NetworkInfo info = intent
.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
State state = info.getState();
LogUtils.i(tag, "type:" + info.getType());
LogUtils.i(tag, "state:" + state);
// 再加一個判斷當前應用是打開的
String MY_PKG_NAME = "com.snda.wallet";
boolean isAppRunning = false;
ActivityManager am = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
List
list = am.getRunningTasks(100);
for (RunningTaskInfo task : list) {
// if (task.topActivity.getPackageName().equals(MY_PKG_NAME)
// && task.baseActivity.getPackageName().equals(MY_PKG_NAME))
if (task.baseActivity.getPackageName().equals(MY_PKG_NAME)) {
isAppRunning = true;
break;
}
}
//如果當前應用是打開的,連上wifi或者3g網絡時,跳轉到應用首頁
if (isAppRunning) {
switch (state) {
case CONNECTED:
Intent intentnew = new Intent(context,
TransferMainActivity.class);
intentnew.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intentnew);
break;
case CONNECTING:
Toast.makeText(context, "網絡正在連接,稍等將為您自動登錄", Toast.LENGTH_SHORT)
.show();
break;
case DISCONNECTED:
Toast.makeText(context, "網絡沒有連接,請您先聯網", Toast.LENGTH_SHORT)
.show();
break;
case DISCONNECTING:
Toast.makeText(context, "網絡正在失去連接,請您注意", Toast.LENGTH_SHORT)
.show();
break;
default:
break;
}
}
//判斷網絡類型
// switch (info.getType()) {
// case ConnectivityManager.TYPE_MOBILE:
// break;
// case ConnectivityManager.TYPE_WIFI:
// break;
// }
}
}
注意記得加權限及注冊廣播接收器
android:name=".MyApplication" android:theme="@style/Theme.Spm">
應用首頁調用網絡網絡操作類判斷網絡狀態
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.transfer_main);
if(NetWorkUtil.checkNetworkStatus(TransferMainActivity.this)==false)//沒有聯網,則先提示用戶聯網
{
NetWorkUtil.showNetWorkStatus(TransferMainActivity.this);
return;
}
……
}