杭州限行时间,10分钟让你实现在APP中对网络状况改变进行大局提示,济宁天气预报

admin 7个月前 ( 04-04 00:48 ) 0条评论
摘要: 10分钟让你实现在APP中对网络状态变化进行全局提示...

一个新项目刚刚开始推行作业,商场人员向我诉苦用户运用时总会呈现各式各样的问题,大部分问题都是因为用户操作不妥导致的,可是在用户眼中的定论便是“你们的 APP 不好用”。

举一个比如,有的用户在运用时禁用了 APP 拜访移动网络,或许有的用户爽性都没有翻开移动数据开关或许 WIFI 开关。可是作为开发人员,咱们应该防止用户考虑,当用户运用呈现问题时,APP 应该能够引导用户前往设置,故有此文。

咱们期望当用户网络衔接不可用时,及时提示用户当时的网络情况。当衔接康复时,将提示用的视图躲藏,而且咱们期望这个提示视图能够作业在一切需求网vloger络的页面中。

思路如下:运用 BaseActivity ,所天资胜屿有页面承继该文件,在该文件中完成依据网络情况mang蟒显现提示、躲藏提示。

好了,废话少说,show u the code。

1. 完成监听网络情况改动的播送接纳器

咱们运用播送接纳器接纳网络改动的 Intent,这儿直接运用静态注册的办法,因为咱们不需求在每个页面独自注册这个 Receiver,那太重量级了。

NetworkConnectChangedReceiver.java

publicclassNetworkConnectChangedReceiverextendsBroadcastReceiver{

丫鬟阿福

privatestaticfinalString TAG = "NetworkConnectChanged";

@Override

publicvoidonReceive(Context context, Intent intent){

//**判别当时的网络衔接情况是否可用*/

booleanisConnected = NetUtils.isConnected(context);

Log.d(TAG, "onReceive: 当时网络 "+ isConnected);

EventBus.getDefault().post( newNetworkChangeEvent(isConnected));

}

}

事情Event:

publicclassNetworkChangeEvent{

publicbooleanisConnected; //是否存在网络

publicNetworkChangeEvent(booleanisConnected){

this蓝天航空空姐.isConnected = isConnected;

}

}

判别网络衔接是否可用:

/**

* 判别网络是否衔接

* @paramcontext

* 杭州限行时刻,10分钟让你完成在APP中对网络情况改动进行全局提示,济宁天气预报@return

*/

publicstaticbooleanisConnected(Context context){

ConnectivityManager connectivity = (ConnectivityManager) context

.getSystemService(Context.CONNECTIVITY_SERVICE);

if( null!= connectivity) {

NetworkInfo info = connectivity.getActiveNetworkInfo();

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

if(info.getState() == NetworkInfo.State.CONNECTED) {

returntrue;

}

}

}

returnfalse;

}

静态注册Receiver:

杭州限行时刻,10分钟让你完成在APP中对网络情况改动进行全局提示,济宁天气预报

2. 在 BaseActivity中监听事情并处理提示视图

看到 EventBus 的时分你是不是现已知道我的完成办法了(笑 XD),是的便是那个现已好久没人提了的 EventBus。当然还能够运用观察者形式来完成,这样就不必依靠第三方库了,可是咱们需求的是快速完成,且对原有代码尽可能少的改动,引进观察者形式明显不如直接拿 EventBus来的便利。

BaseActivity.java

publicclassBaseActivityextendsActivity{

prote监督不可届ctedContext mContext;

protectedACache mACache;

protectedbooleanmCheckNetWork = true; //默许查看网络情况

View mTipView;

WindowManager mWindowManager;

WindowManager.LayoutParams mLayoutParams;

@Overri喜兰妮de

protectedvoidonCreate(Bundle savedInstanceState){

super.onCre杭州限行时刻,10分钟让你完成在APP中对网络情况改动进行全局提示,济宁天气预报ate(savedInstanceState);

mContext = this;

this.mACache = ACache.get(mContext);

MyApp.addActivity( this);

initTipView(); //初始化提示View

EventBus.getDefault().register( this);

}

@Override

protectedvoidonResume(){

super.onResume();

MobclickAgent.onResume( this);

//在无网络情况下翻开APP时,体系不会发送网络情况改动的Intent杭州限行时刻,10分钟让你完成在APP中对网络情况改动进行全局提示,济宁天气预报,需求自己手动查看

hasNetWork(NetUtils.isConnected(mContext));

}

@Override

protectedvoidonPause(){

super.onPause();

MobclickAge杭州限行时刻,10分钟让你完成在APP中对网络情况改动进行全局提示,济宁天气预报nt.onPause( this); 杭州限行时刻,10分钟让你完成在APP中对网络情况改动进行全局提示,济宁天气预报

}

@Override

p师傅好坏rotectedvoidonDestroy(){

super.onDestroy();

MyApp.removeActivity( this);

EventBus.getDefau看护香香公主lt().unregister供组词( this);

}

@Override

publicvoidfinish(){

super.finish();

//当提示View被动态增加后直接封闭页面会导致该View内存溢出,所以需求在finish时移除

if(mTipView != null&& mTipView.getParent() != null) {

mWindowManager.removeView(mTipView);

}

}

@Subscribe(threadMode = ThreadMode.MAIN)

publicvoidonNetworkChangeEvent(NetworkChangeEvent event){

hasNetWork(event.isConnected);

}

privatevoidhasNetWork(booleanhas){

if(isChec搬运待定kNetWork()) {

if(has) {

if(mTipView != null&& mTipView.getParent() != null) {

mWindowManager.r爸爸不要emoveView(mTipView);

}

} else{

if(mTipView.getParent() == null) {

mWindowManager.addView(mTipView, mLayoutParams);

}

}

}

}

publicvoidsetCheckNetWork(booleancheckNetWork){

mCheckNetWork = checkNetWork;

}

publicbooleanisCheckNetWork(){

returnmCheckNetWork;

}

privatevoidinitTipView(){

LayoutInflater inflater = getLayoutInflater();

mTipView = inflater.inflate(R.layout.layout_network_tip, null); //提示View布局

mWindowManager = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);

mLayoutParams = newWi大漠敦煌纯音乐mp3ndowManager.LayoutParams(

ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT,

WindowManager.LayoutParams.TYPE_APPLICATION,

WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE

| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,

PixelFormat.TRANSLUCENT);

//运用非CENTER时,能够经过设置XY的值来改动View的方位

mLayoutParams.gravity = Gravity.TOP;

mLayoutParams.x = 0;

mLayoutParams.y = 0;

} 红烧鸡肝

}

默许一切承继 BaseActivity 的页面当网络情况改动活无网络时都会显现提示,假如某个页面不需求网络情况提示,能够在该页面 onCreate 办法中调用 setCheckNetWork(false) 即可。

因为我悉数页面都有一个50dp高度的 toolbar,所以我直接在 R.layout.layout_network_tip 文件中设置了上边距。你也能够在 BaseActivity 中经过办法来设置 mLayoutParams.x retube= 0;mLayoutParams.y = 0;杭州限行时刻,10分钟让你完成在APP中对网络情况改动进行全局提示,济宁天气预报 来使每个页面动态设置提示的方位。

性博会

终究作用如下图:

作者:Coo 1

链接:https://juejin.im/post/5c8fa0a55188252d7f2a2cda

声明:该文观念央视二套骏丰频谱屋仅代表作者自己,搜狐号系信息发布渠道,搜狐仅供给信息存储空间效劳。
教父复仇