封装BaseActivity

南笙酒味 提交于 2019-12-02 15:17:37

BaseActivity

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.net.ConnectivityManager;
import android.net.NetworkRequest;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import com.eshuix.javademo.NetworkCallbackImpl;
import com.eshuix.javademo.utli.LoadDialog;

public abstract class BaseActivity extends AppCompatActivity {

    private LoadDialog loadDialog;

    private NetworkCallbackImpl networkCallback;
    private ConnectivityManager connMgr;

    /**
     * 布局文件id
     */
    protected abstract int attachLayoutRes();

    /**
     * 初始化 View
     */
    public abstract void initView();

    /**
     * 初始化数据
     */
    public abstract void initData();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        //防止截屏攻击风险
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
        //仿系统自带短信界面 可以完全漂浮在软键盘之上
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE |
                WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
        super.onCreate(savedInstanceState);
        setContentView(attachLayoutRes());

        initView();
        initData();
        initTipView();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            registerNetworkMonitoring();
        }
    }

    /**
     * 初始化提示控件
     */
    private void initTipView() {
        //加载Dialog
        loadDialog = LoadDialog.getInstance();
        loadDialog.setCancelable(false);
    }

    /**
     * 重写startActivity
     *
     * @param clz 跳转页面的class
     */
    public void startActivity(Class<?> clz) {
        Intent intent = new Intent(this, clz);
        startActivity(intent);
        enterTransitionAnim();
    }

    /**
     * 重写startActivity
     *
     * @param clz    跳转页面的class
     * @param bundle 携带的数据
     */
    public void startActivity(Class<?> clz, @NonNull Bundle bundle) {
        Intent intent = new Intent(this, clz);
        intent.putExtras(bundle);
        startActivity(intent);
        enterTransitionAnim();
    }

    public void startActivityForResult(Class<?> clz, int requestCode) {
        Intent intent = new Intent(this, clz);
        startActivityForResult(intent, requestCode);
        enterTransitionAnim();
    }

    public void startActivityForResult(Class<?> clz, int requestCode, @NonNull Bundle bundle) {
        Intent intent = new Intent(this, clz);
        startActivityForResult(intent, requestCode, bundle);
        enterTransitionAnim();
    }

    public Bundle getIntentBundle() {
        return getIntent().getExtras();
    }

    /**
     * 进入Activity过渡动画
     */
    private void enterTransitionAnim(){
        overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
    }

    /**
     * 退出Activity过渡动画
     */
    private void quitTransitionAnim(){
        overridePendingTransition(android.R.anim.fade_out, android.R.anim.fade_in);
    }

    /**
     * 检测网络是否连接
     * 如果未注册[registerNetworkMonitoring] 会抛出空指针异常
     */
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public Boolean isNetworkConnected(){
        if (networkCallback != null){
            return networkCallback.isNetworkConnected();
        }
        throw new NullPointerException();
    }
    /**
     * 注册网络监听
     */
    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    private void registerNetworkMonitoring() {
        networkCallback = NetworkCallbackImpl.getInstance();
        connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connMgr != null) {
            //需要<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />权限
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                connMgr.registerDefaultNetworkCallback(networkCallback);
            } else {
                NetworkRequest.Builder builder = new NetworkRequest.Builder();
                NetworkRequest request = builder.build();
                connMgr.registerNetworkCallback(request, networkCallback);
            }
        }
    }

    /**
     * 注销网络监听
     */
    private void unregisterNetworkMonitoring() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            if (connMgr != null) {
                connMgr.unregisterNetworkCallback(networkCallback);
            }
        }
    }

    /**
     * 显示加载Dialog
     */
    public void showLoadDialog() {
        loadDialog.show(getSupportFragmentManager(), this.getPackageName());
    }

    /**
     * 关闭加载Dialog
     */
    public void dismissLoadDialog(){
        loadDialog.dismiss();
    }

    /**
     * 显示长Toast
     *
     * @param msg 显示的信息
     */
    public void showLongToast(String msg) {
        Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();
    }

    /**
     * 显示短Toast
     *
     * @param msg 显示的信息
     */
    public void showShortToast(String msg) {
        Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        // Fragment 逐个出栈
        int count = getSupportFragmentManager().getBackStackEntryCount();
        if (count == 0){
            super.onBackPressed();
        }else {
            getSupportFragmentManager().popBackStack();
        }

        quitTransitionAnim();
    }

    @Override
    public void finish() {
        super.finish();
        quitTransitionAnim();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterNetworkMonitoring();
    }

    /**
     * 沉浸状态栏
     * 重写onWindowFocusChanged方法实现沉浸模式
     */
//    @Override
//    public void onWindowFocusChanged(boolean hasFocus) {
//        super.onWindowFocusChanged(hasFocus);
//        if (hasFocus && Build.VERSION.SDK_INT >= 21) {
//            View decorView = getWindow().getDecorView();
//            decorView.setSystemUiVisibility(
//                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
//                            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
//                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
//                            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
//                            | View.SYSTEM_UI_FLAG_FULLSCREEN
//                            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
//            getWindow().setNavigationBarColor(Color.TRANSPARENT);//设置虚拟按键透明
//            getWindow().setStatusBarColor(Color.TRANSPARENT);//设置状态栏透明
//        } else if (hasFocus && Build.VERSION.SDK_INT >= 19) {
//            View decorView = getWindow().getDecorView();
//            decorView.setSystemUiVisibility(
//                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
//                            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
//                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
//                            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
//                            | View.SYSTEM_UI_FLAG_FULLSCREEN
//                            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
//        }
//    }

}

加载Dialog

public class LoadDialog extends DialogFragment {

    private static class LoadDialogHolder {
        private static final LoadDialog INSTANCE = new LoadDialog();
    }
    private LoadDialog (){}
    public static LoadDialog getInstance() {
        return LoadDialog.LoadDialogHolder.INSTANCE;
    }
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.dialog_progress_bar,container,false);
    }
}

网络检测

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public class NetworkCallbackImpl extends ConnectivityManager.NetworkCallback {

    private static class NetworkCallbackImplHolder {
        private static final NetworkCallbackImpl INSTANCE = new NetworkCallbackImpl();
    }
    private NetworkCallbackImpl (){}
    public static NetworkCallbackImpl getInstance() {
        return NetworkCallbackImplHolder.INSTANCE;
    }

    private boolean isNetworkConnected;

    @Override
    public void onAvailable(@NonNull Network network) {
        super.onAvailable(network);
        //网络已连接
        isNetworkConnected = true;
    }

    @Override
    public void onLost(@NonNull Network network) {
        super.onLost(network);
        //网络已断开
        isNetworkConnected = false;
    }

    @Override
    public void onCapabilitiesChanged(@NonNull Network network, @NonNull NetworkCapabilities networkCapabilities) {
        super.onCapabilitiesChanged(network, networkCapabilities);
        if (networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {
            if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {//网络类型为wifi

            } else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {//蜂窝网络

            } else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH)){//蓝牙

            } else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)){//以太网

            } else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)){//vpn

            } else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI_AWARE)){//Wi-Fi Aware

            } else if (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_LOWPAN)){//LoWPAN

            } else { //其他网络

            }
        }
    }

    /**
     * 判断网络是否连接
     */
    public boolean isNetworkConnected(){
        return isNetworkConnected;
    }
}

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!