android开发步步为营之20:网络设置

网络设置这块在手机应用里面是非常重要的一块,因为一般应用都需要和外部网络做交互的。本篇文章就展示了一个比较经典应用场景。比如我最近在开发的转账应用。这个是需要和网络交互的。当用户打开应用之后,应用首先会判断用户是否已经打开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;

/**

* <p>网络设置类</p>

* @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);

}

}

注意记得加权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<uses-permission android:name="android.permission.VIBRATE" />

新建网络状态广播接收器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<RunningTaskInfo> 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;

// }

}

}

注意记得加权限及注册广播接收器

<uses-permission android:name="android.permission.GET_TASKS" />

<application android:icon="@drawable/icon" android:label="@string/app_name"

android:name=".MyApplication" android:theme="@style/Theme.Spm">

<receiver android:name=".network.NetWorkStateReceiver">

<intent-filter>

<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />

</intent-filter>

</receiver>

应用首页调用网络网络操作类判断网络状态

@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;

}

……

}

时间: 2024-10-09 02:38:50

android开发步步为营之20:网络设置的相关文章

Android开发学习之路--网络编程之xml、json

一般网络数据通过http来get,post,那么其中的数据不可能杂乱无章,比如我要post一段数据,肯定是要有一定的格式,协议的.常用的就是xml和json了.在此先要搭建个简单的服务器吧,首先呢下载xampp,然后安装之类的就不再多讲了,参考http://cnbin.github.io/blog/2015/06/05/mac-an-zhuang-he-shi-yong-xampp/.安装好后,启动xampp,之后在浏览器输入localhost或者127.0.0.1就可以看到如下所示了: 这个就

android开发步步为营之56:Android开发技术点总结(持续更新)

1.eclipse svn插件下载 http://subclipse.tigris.org/update_1.6.x http://subclipse.tigris.org/update_1.8.x 64位机器 http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA 2.eclipse常用插件下载 http://blog.csdn.net/jackiehff/article/details/8181945 3.unico

从零开始学android开发-通过WebService进行网络编程,使用工具类轻松实现

相信大家在平常的开发中,对网络的操作用到HTTP协议比较多,通过我们使用Get或者Post的方法调用一个数据接口,然后服务器给我们返回JSON格式的数据,我们解析JSON数据然后展现给用户,相信很多人很喜欢服务器给我们返回JSON数据格式,因为他解析方便,也有一些JSON的解析库,例如Google提供的GSON,阿里巴巴的FastJson,不过还是推荐大家使用FastJson来解析,我自己开发中也是用FastJson来解析,FastJson的介绍http://code.alibabatech.c

第二篇 android开发环境搭建--谷歌代理设置 adt-bundle下载,sdk Manager使用 android环境变量配置

一 .从谷歌下载ADT adt( Android Development Tools )是谷歌开发的andorid开发的工具,adt-bundle直接集成了eclipse和android sdk(一般里面有最新版本的sdk)下载adt-bundle之后可以直接打开里面的eclipse即可进行android的开发 下载地址:adt官网下载地址 不过大家都知道谷歌的网站在大陆是受到限制的,这里交给大家一个方法,让你方便访问谷歌的网站 当然方法无非就是设置一个代理,这里可以用"自由门"这个软

Android应用打开手机的网络设置界面

App应用离不开与服务器进行网络交互,但是有时间在网络信息不好的时间,我们要给用户提示让进行网络设置,在我们应用中一般会有一个网络加载错误(失败)的页面,上面有操作控件,点击可以进入手机的网络设置界面,代码很简单: /**intent对象*/ Intent intent = null; /**判断手机系统的版本 即API大于10 就是3.0或以上版本及魅族手机*/ if (android.os.Build.VERSION.SDK_INT > 10 && !android.os.Bui

android开发步步为营之69:Activity通过设置Theme模拟对话框效果

对话框应该说是手机app中最常见的和用户进行交互的方式了,之前也总结过一下,主要通过popupwindow,dialog,windowmanger来实现,本文详细介绍一下如何通过Activity实现弹出对话框效果. 来先看下效果,有个感性的认识. 中间那个提示其实是一个activity,好的,下面开始一步步实现这个神奇的效果.   第一步:设计对话框页面activity_simulate_dialog.xml <span style="font-size:14px;">&l

android开发步步为营之70:android接入Google Analytics总结

求人不如求己,今天项目里要接入Google Analytics,这个是做应用统计分析用的,可以查看当前手机活跃用户,事件点击等等数据,先看看效果: 之前eclipse里面接入已经成功,昨天项目组决定项目转成使用android studio来开发,看google官方文档,官方文档https://developers.google.com/analytics/devguides/collection/android/v4/,然后官方文档里面的配置文件是用google-services.json的,这

android开发步步为营之58:给图片绘制圆形气泡背景效果

最近在开发项目的时候,有一个需求,需要给应用图标绘制圆形气泡背景,有了彩色气泡这样显得漂亮一点,气泡的颜色是应用图标的颜色均值,先看看效果,然后,我再给出demo. demo应用图标是这样的: 添加气泡背景后是这样的: 仔细看圆形背景颜色是图标颜色的均值. 好的,下面我们来完成这个demo. 第一步.编写页面activity_drawcycle.xml <?xml version="1.0" encoding="utf-8"?> <LinearLa

android开发步步为营之34:四大组件之ContentProvider

ContentProvider,从字面意义上理解,内容提供者,这个类目的就是一个桥梁的作用,让一个应用的数据(SQLiteDatabase, SharedPreferences,Xml,Txt等数据),通过ContentProvider可以让其他的应用访问. 理论知识 (一).ContentProvider简介 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同