Android development to obtain commonly used android device parameter information

As shown below:

View tools: the method of downloading apk lacks the xutils library, you can add the xutils library yourself

package com.mchsdk.paysdk.utils;

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Point;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Environment;
import android.provider.Settings;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.FileProvider;
import android.telephony.TelephonyManager;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;

import java.io.File;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
import java.util.Locale;
import java.util.UUID;

/**
 * @author xiayiye5
 * 2020年6月3日11:24:04
 * Android 开发用到的工具类
 */
public class YhshUtils {

    //静态内部内实现单例设计模式
    private YhshUtils() {
    }

    public static YhshUtils getInstance() {
        return YhshSingle.CREATE;
    }

    private static class YhshSingle {
        private static final YhshUtils CREATE = new YhshUtils();
    }

    /**
     * 判断是否安装某APP
     *
     * @param context     上下文
     * @param packageName apk包名
     * @return 返回结果
     */
    public boolean isInstallApk(Context context, String packageName) {
        if (TextUtils.isEmpty(packageName)) {
            return false;
        }
        try {
            ApplicationInfo info = context.getPackageManager().getApplicationInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES);
            return info != null;
        } catch (PackageManager.NameNotFoundException e) {
            return false;
        }
    }

    /**
     * 下载apk的方法
     *
     * @param activity         上下文
     * @param downloadTextView 显示下载的TextView
     */
    private void downloadApk(final Activity activity, final View downloadTextView) {
        //将按钮设置成正在下载中
        ((TextView) downloadTextView).setText("正在下载中……");
        HttpUtils httpUtils = new HttpUtils();
        // 判断sd卡是否挂载
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            final String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/gfan.apk";
            //获取下载apk的地址
            String apkDownUrl = "http://cdn1.down.apk.gfan.net.cn/Pfiles/2020/05/21/gfanxapp_20200521194529_45df3390-b57e-4c16-b0fb-fb0ebcac1a80.apk";
            SharedPreferences downApkFile = activity.getSharedPreferences("DownApkFile", Context.MODE_PRIVATE);
            apkDownUrl = downApkFile.getString("downUrl", apkDownUrl);
            MCLog.e("打印apk下载url", apkDownUrl);
            httpUtils.download(apkDownUrl, filePath, new RequestCallBack<File>() {
                // 下载成功的时候调用
                @Override
                public void onSuccess(ResponseInfo<File> arg0) {
                    CommonLoading.getInstance().closeDialog();
                    Toast.makeText(activity.getApplicationContext(), "下载成功", Toast.LENGTH_SHORT).show();
                    // 安装最新版本
                    install(filePath, activity);
                }

                // 下载失败的时候调用
                @Override
                public void onFailure(HttpException arg0, String arg1) {
                    Log.e("下载失败", "失败了:" + arg0.getLocalizedMessage());
                    Toast.makeText(activity.getApplicationContext(), "下载失败了," + arg0.getLocalizedMessage(), Toast.LENGTH_LONG).show();
                }

                @Override
                public void onLoading(long total, long current, boolean isUploading) {
                    super.onLoading(total, current, isUploading);
                    int progress = (int) (((float) current / (float) total) * 100);
                    Log.e("下载进度", current + "/" + total + ":进度" + progress + "%");
                    //将按钮设置成正在下载中
//                    ((TextView) downloadTextView).setText(new StringBuilder("正在下载中……").append(progress).append("%"));
                }
            });
        }
    }

    /**
     * 安装最新版本
     *
     * @param filePath 安装包的路径
     */
    private void install(String filePath, Activity activity) {
        Intent intent = new Intent();
        intent.setAction("android.intent.action.VIEW");
        intent.addCategory("android.intent.category.DEFAULT");
        Uri fileUri;
        File file = new File(filePath);
        if (Build.VERSION.SDK_INT >= 24) {
            fileUri = FileProvider.getUriForFile(activity, activity.getApplicationContext().getPackageName() + ".provider", file);
        } else {
            //android70.以下手机
            fileUri = Uri.fromFile(file);
        }

        //Android7.0以上必须添加如下代码
        activity.grantUriPermission(activity.getPackageName(), fileUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

        intent.setDataAndType(fileUri, "application/vnd.android.package-archive");
        // 当当前的activity退出的时候,会调用之前activity的onActivityResult方法
        activity.startActivityForResult(intent, 0);
    }

    //先定义
    private static final int REQUEST_EXTERNAL_STORAGE = 1;
    private static String[] PERMISSIONS_STORAGE = {
            "android.permission.READ_EXTERNAL_STORAGE",
            "android.permission.WRITE_EXTERNAL_STORAGE"};

    public void checkPermission(Activity activity, View downloadTextView) {
        try {
            //检测是否有写的权限
            int permission = ActivityCompat.checkSelfPermission(activity, "android.permission.WRITE_EXTERNAL_STORAGE");
            if (permission != PackageManager.PERMISSION_GRANTED) {
                // 没有写的权限,去申请写的权限,会弹出对话框
                ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE);
            } else {
                //下载安装
                downloadApk(activity, downloadTextView);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * @param activity 当前activity
     * @return 1:竖屏 2 横屏
     */
    public int screenOrientation(Activity activity) {
        //获取设置的配置信息
        return activity.getResources().getConfiguration().orientation;
    }

    /**
     * 保存token
     *
     * @param loginToken token
     * @param activity   activity页面
     */
    public void setLoginToken(Context activity, String loginToken) {
        SharedPreferences tokenFile = activity.getSharedPreferences("token_file", Context.MODE_PRIVATE);
        tokenFile.edit().putString("token_key", loginToken).apply();
    }

    /**
     * 取出登录的token
     *
     * @return 返回登录的token
     */
    public String getLoginToken(Activity activity) {
        SharedPreferences tokenFile = activity.getSharedPreferences("token_file", Context.MODE_PRIVATE);
        String tokenValue = tokenFile.getString("token_key", "");
        MCLog.e("打印保存的token", tokenValue + "=");
        return tokenValue;
    }

    /**
     * 获取手机参数为了调用数据统计接口
     */
    public PackageInfo getPhoneParam(Activity activity) {
        //获取包管理器
        PackageManager pm = activity.getPackageManager();
        //获取包信息
        try {
            PackageInfo packageInfo = pm.getPackageInfo(activity.getPackageName(), 0);
            //返回版本号
            String versionName = packageInfo.versionName;
            int versionCode = packageInfo.versionCode;
            return packageInfo;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 获取手机IMSI
     */
    public String getIMSI(Activity context) {
        try {
            TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
            //获取IMSI号
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (context.checkSelfPermission(Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
                    context.requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 1008);
                }
            }
            String imsi = telephonyManager.getSubscriberId();
            if (null == imsi) {
                imsi = "";
            }
            return imsi;
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

    /**
     * 获取当前手机系统语言。
     *
     * @return 返回当前系统语言。例如:当前设置的是“中文-中国”,则返回“zh-CN”
     */
    public String getSystemLanguage() {
        return Locale.getDefault().getLanguage();
    }

    /**
     * 获取当前系统上的语言列表(Locale列表)
     *
     * @return 语言列表
     */
    public Locale[] getSystemLanguageList() {
        return Locale.getAvailableLocales();
    }

    /**
     * 获取当前手机系统版本号
     *
     * @return 系统版本号
     */
    public String getSystemVersion() {
        return android.os.Build.VERSION.RELEASE;
    }

    /**
     * 获取手机型号
     *
     * @return 手机型号
     */
    public String getSystemModel() {
        return android.os.Build.MODEL;
    }

    /**
     * 获取手机厂商
     *
     * @return 手机厂商
     */
    public String getDeviceBrand() {
        return android.os.Build.BRAND;
    }

    /**
     * 获取IP地址
     *
     * @param context 上下文
     * @return 返回值
     */
    public String getIpAddress(Context context) {
        NetworkInfo info = ((ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
        if (info != null && info.isConnected()) {
            // 3/4g网络
            if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
                try {
                    for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {
                        NetworkInterface intf = en.nextElement();
                        for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
                            InetAddress inetAddress = enumIpAddr.nextElement();
                            if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
                                return inetAddress.getHostAddress();
                            }
                        }
                    }
                } catch (SocketException e) {
                    e.printStackTrace();
                }

            } else if (info.getType() == ConnectivityManager.TYPE_WIFI) {
                //  wifi网络
                WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
                WifiInfo wifiInfo = wifiManager.getConnectionInfo();
                return toIpAddress(wifiInfo.getIpAddress());
            } else if (info.getType() == ConnectivityManager.TYPE_ETHERNET) {
                // 有限网络
                return getLocalIp();
            }
        }
        return null;
    }

    /**
     * 将int类型的IP地址转为String类型的IP
     *
     * @param ip IP地址
     * @return 返回IP数据
     */
    private static String toIpAddress(int ip) {
        return (ip & 0xFF) + "." +
                ((ip >> 8) & 0xFF) + "." +
                ((ip >> 16) & 0xFF) + "." +
                (ip >> 24 & 0xFF);
    }


    /**
     * 获取有限网IP
     *
     * @return 返回
     */
    private String getLocalIp() {
        try {
            for (Enumeration<NetworkInterface> en = NetworkInterface
                    .getNetworkInterfaces(); en.hasMoreElements(); ) {
                NetworkInterface intf = en.nextElement();
                for (Enumeration<InetAddress> enumIpAddr = intf
                        .getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
                    InetAddress inetAddress = enumIpAddr.nextElement();
                    if (!inetAddress.isLoopbackAddress()
                            && inetAddress instanceof Inet4Address) {
                        return inetAddress.getHostAddress();
                    }
                }
            }
        } catch (SocketException ex) {
            ex.printStackTrace();
        }
        return "0.0.0.0";
    }

    /**
     * 获取屏幕尺寸
     *
     * @param context 当前activity
     * @return 返回尺寸
     */
    public double getScreenInch(Activity context) {
        double mInch = 0;
        try {
            int realWidth = 0, realHeight = 0;
            Display display = context.getWindowManager().getDefaultDisplay();
            DisplayMetrics metrics = new DisplayMetrics();
            display.getMetrics(metrics);
            if (android.os.Build.VERSION.SDK_INT >= 17) {
                Point size = new Point();
                display.getRealSize(size);
                realWidth = size.x;
                realHeight = size.y;
            } else if (android.os.Build.VERSION.SDK_INT < 17 && android.os.Build.VERSION.SDK_INT >= 14) {
                Method mGetRawH = Display.class.getMethod("getRawHeight");
                Method mGetRawW = Display.class.getMethod("getRawWidth");
                realWidth = (Integer) mGetRawW.invoke(display);
                realHeight = (Integer) mGetRawH.invoke(display);
            } else {
                realWidth = metrics.widthPixels;
                realHeight = metrics.heightPixels;
            }
            mInch = formatDouble(Math.sqrt((realWidth / metrics.xdpi) * (realWidth / metrics.xdpi) + (realHeight / metrics.ydpi) * (realHeight / metrics.ydpi)), 1);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return mInch;
    }

    /**
     * Double类型保留指定位数的小数,返回double类型(四舍五入)
     * newScale 为指定的位数
     */
    private double formatDouble(double d, int newScale) {
        BigDecimal bd = new BigDecimal(d);
        return bd.setScale(newScale, BigDecimal.ROUND_HALF_UP).doubleValue();
    }

    /**
     * 获取android的唯一标识
     *
     * @param context 上下文
     * @return 返回androidId
     */
    public String getAndroidId(Context context) {
        final String uuid = UUID.randomUUID().toString();
        String androidId = Settings.System.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
        if (TextUtils.isEmpty(androidId)) {
            return uuid;
        } else {
            return androidId;
        }
    }
}

 

Guess you like

Origin blog.csdn.net/xiayiye5/article/details/106786866