关于android开发通用的工具类篇《二》

   哈喽,各位笔友们,在我们开发中往往会去获取设备的各种id号,屏幕高度,网络情况等等,这里列出几类通用的方法

public class HeadUtil {
    /**
     * 未知
     */
    public static final int NETWORK_UNKNOW = -2;
    /**
     * 没有连接网络
     */
    private static final int NETWORK_NONE = -1;
    /**
     * 2G网络
     */
    public static final int NETWORK_2G = 0;
    /**
     * 3G网络
     */
    public static final int NETWORK_3G = 1;
    /**
     * 4G网络
     */
    public static final int NETWORK_4G = 2;
    /**
     * 无线网络
     */
    private static final int NETWORK_WIFI = 3;
    /**
     * 定义电话管理器对象
     */
    public static TelephonyManager mTelephonyManager;
    /**
     * 定义连接管理器对象
     */
    public static ConnectivityManager mConnectivityManager;
    /**
     * 定义网络信息对象
     */
    public static NetworkInfo mNetworkInfo;

    /**
     * 获取App版本
     *
     * @return
     */
    public static String getAppVersion() {
        return BuildConfig.VERSION_NAME;
    }

    /**
     * 获取安卓版本
     *
     * @return
     */
    public static String getAndroidVersion() {
        return "android" + Build.VERSION.RELEASE;
    }

    /**
     * 根据IP地址获取MAC地址
     *
     * @return
     */
    public static String getLocalMacAddressFromIp() {
        String strMacAddress = null;
        try {
            //获得Ip地址
            InetAddress ip = getLocalInetAddress();
            byte[] b = NetworkInterface.getByInetAddress(ip).getHardwareAddress();
            StringBuffer buffer = new StringBuffer();
            for (int i = 0; i < b.length; i++) {
                if (i != 0) {
                    buffer.append(':');
                }
                String str = Integer.toHexString(b[i] & 0xFF);
                buffer.append(str.length() == 1 ? 0 + str : str);
            }
            strMacAddress = buffer.toString().toUpperCase();
        } catch (Exception e) {
        }
        return strMacAddress == null ? "mac" : strMacAddress;
    }

    /**
     * 获取移动设备本地IP
     *
     * @return
     */
    private static InetAddress getLocalInetAddress() {
        InetAddress ip = null;
        try {
            //列举
            Enumeration<NetworkInterface> en_netInterface = NetworkInterface.getNetworkInterfaces();
            while (en_netInterface.hasMoreElements()) {//是否还有元素
                NetworkInterface ni = en_netInterface.nextElement();//得到下一个元素
                Enumeration<InetAddress> en_ip = ni.getInetAddresses();//得到一个ip地址的列举
                while (en_ip.hasMoreElements()) {
                    ip = en_ip.nextElement();
                    if (!ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {
                        break;
                    } else {
                        ip = null;
                    }
                }
                if (ip != null) {
                    break;
                }
            }
        } catch (SocketException e) {
            e.printStackTrace();
        }
        return ip;
    }

    /**
     * 获取屏幕宽度
     * @param activity
     * @return
     */
    public static String getScreenWidth(Activity activity) {
        WindowManager windowManager = activity.getWindowManager();
        Display display = windowManager.getDefaultDisplay();
        int screenWidth = display.getWidth();
        return String.valueOf(screenWidth);
    }

    /**
     * 获取屏幕高度
     * @param activity
     * @return
     */
    public static String getScreenHeight(Activity activity) {
        WindowManager windowManager = activity.getWindowManager();
        Display display = windowManager.getDefaultDisplay();
        int screenHeight = display.getHeight();
        return String.valueOf(screenHeight);
    }

    /**
     * 生成唯一UUID
     *
     * @return
     */
    public static String getUniqueUUID() {
        String serial = null;
        String m_szDevIDShort = "35" + Build.BOARD.length() % 10 + Build.BRAND.length() % 10
                + Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10
                + Build.DISPLAY.length() % 10 + Build.HOST.length() % 10
                + Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10
                + Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10
                + Build.TAGS.length() % 10 + Build.TYPE.length() % 10
                + Build.USER.length() % 10;
        try {
            serial = Build.class.getField("SERIAL").get(null).toString(); //API>=9 使用serial号
            return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
        } catch (Exception exception) {
            //serial需要一个初始化
            serial = "serial";
        }
        return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
    }

    /**
     * 获取网络类型
     *
     * @param context
     * @return 网络类型
     */
    public static int getNetWorkType(Context context) {
        // 得到连接管理器对象
        mConnectivityManager = (ConnectivityManager) context
                .getSystemService(Context.CONNECTIVITY_SERVICE);
        mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
        if (mNetworkInfo != null && mNetworkInfo.isConnected()) {
            if (mNetworkInfo.getType() == (ConnectivityManager.TYPE_WIFI)) {
                return NETWORK_WIFI;
            } else if (mNetworkInfo.getType() == (ConnectivityManager.TYPE_MOBILE)) {
                return getMobileNetType(context);
            }
        }
        return NETWORK_NONE;
    }

    /**
     * 获取移动网络的类型
     *
     * @param context
     * @return 移动网络类型
     */
    public static final int getMobileNetType(Context context) {
        mTelephonyManager = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
        if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE)
                != PackageManager.PERMISSION_GRANTED) {
            return 3;
        }
        int networkType = mTelephonyManager.getNetworkType();
        return getNetworkClass(networkType);
    }

    /**
     * 判断移动网络的类型
     *
     * @param networkType
     * @return 移动网络类型
     */
    public static final int getNetworkClass(int networkType) {
        switch (networkType) {
            case TelephonyManager.NETWORK_TYPE_GPRS:
            case TelephonyManager.NETWORK_TYPE_EDGE:
            case TelephonyManager.NETWORK_TYPE_CDMA:
            case TelephonyManager.NETWORK_TYPE_1xRTT:
            case TelephonyManager.NETWORK_TYPE_IDEN:
                return NETWORK_2G;
            case TelephonyManager.NETWORK_TYPE_UMTS:
            case TelephonyManager.NETWORK_TYPE_EVDO_0:
            case TelephonyManager.NETWORK_TYPE_EVDO_A:
            case TelephonyManager.NETWORK_TYPE_HSDPA:
            case TelephonyManager.NETWORK_TYPE_HSUPA:
            case TelephonyManager.NETWORK_TYPE_HSPA:
            case TelephonyManager.NETWORK_TYPE_EVDO_B:
            case TelephonyManager.NETWORK_TYPE_EHRPD:
            case TelephonyManager.NETWORK_TYPE_HSPAP:
                return NETWORK_3G;
            case TelephonyManager.NETWORK_TYPE_LTE:
                return NETWORK_4G;
            default:
                return NETWORK_UNKNOW;
        }
    }

    /**
     * 获取IMEI或DeviceId
     *
     * @param context
     * @return
     */
    public static String getIMEIDeviceId(Context context) {
        String deviceId;
        //当APK运行在Android10(API>=29)及以上时,获取到的是AndroidID
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            deviceId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
        } else {
            final TelephonyManager mTelephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
            //当APK运行在Android6.0(API>=23)及以上时,需要check有无READ_PHONE_STATE权限。
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (context.checkSelfPermission(Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
                    return "";
                }
            }
            assert mTelephony != null;
            //如果TelephonyManager获取到的DeviceId不为null
            if (mTelephony.getDeviceId() != null) {
                //获取GSM手机的国际移动设备识别码(IMEI)或者 CDMA手机的移动设备识别码(MEID).
                deviceId = mTelephony.getDeviceId();
            } else {
                //如果DeviceId为null,我们的DID依然是AndroidID。
                deviceId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
            }
        }
        return deviceId;
    }

    /**
     * 如果getIMEIDeviceId获取不到则获取序列号
     *
     * @return
     */
    public static String getSerialNumber() {
        String serial = null;
        try {
            Class<?> c = Class.forName("android.os.SystemProperties");
            Method get = c.getMethod("get", String.class);
            serial = (String) get.invoke(c, "ro.serialno");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return serial;
    }


    private static String getUserLoginToken(Context ctx) {

        String strUri = String.format("content://%s/%s",  STR_REGISTER_CONTENTPROVIDER_DONAME, "userToken");
        Uri uri = Uri.parse(strUri);

        ContentResolver resolver = ctx.getContentResolver();
        String token = "token";  // note : 缺省token

        try {
            Cursor cursor = resolver.query(uri, null, null, null, null);
            if (cursor != null) {
                if (cursor.moveToFirst()) {
                    int columnNo = cursor.getColumnIndex("user_token");
                    if (columnNo >= 0) {
                        token = cursor.getString(columnNo);
                    }
                }
                cursor.close();
            }
        } catch (Exception e) {
            Log.e("apCnst", e.toString());
        }
        return token;
    }

    public static String getUserId(Context ctx) {

        String strUri = String.format("content://%s/%s",  STR_REGISTER_CONTENTPROVIDER_DONAME, "userToken");
        Uri uri = Uri.parse(strUri);

        ContentResolver resolver = ctx.getContentResolver();
        String id = " ";  // note : 缺省token

        try {
            Cursor cursor = resolver.query(uri, null, null, null, null);
            if (cursor != null) {
                if (cursor.moveToFirst()) {
                    int columnNo = cursor.getColumnIndex("user_id");
                    if (columnNo >= 0) {
                        id = cursor.getString(columnNo);
                    }
                }
                cursor.close();
            }
        } catch (Exception e) {
            Log.e("apCnst", e.toString());
        }
        return id;
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: Android BLE(蓝牙低功耗)工具类是用于简化在Android应用中与蓝牙设备进行通信的开发过程的类。该工具类提供了一系列方法和功能,使得与BLE设备的连接、数据传输和操作变得更加简单和高效。 首先,该工具类提供了与BLE设备进行连接和断开连接的方法。通过调用连接方法,我们可以与目标BLE设备建立起稳定的连接,并获取一个用于后续通信的Gatt服务。同时,断开连接方法可以安全地中断与设备之间的通信,释放资源并确保连接关闭。 其次,该工具类还包含了搜索BLE设备的功能。我们可以使用这个功能来扫描附近的BLE设备,并获取它们的名称、MAC地址和其他相关信息。这可以帮助我们快速找到需要连接的设备,并进行下一步操作。 在连接建立后,该工具类还提供了读取、写入和监听BLE设备特征的方法。我们可以通过读取特征值来获取设备传输的数据,通过写入特征值来向设备发送指令,或者通过监听特征值的变化来实时获取设备的状态更新。这些方法使得与BLE设备的数据交互变得非常方便。 此外,该工具类还支持BLE设备的服务发现、特征值读写的状态回调以及连接状态的监听等功能。它提供了丰富的回调接口,使得我们可以根据需求进行相应的处理和操作。 总之,Android BLE工具类开发人员提供了一系列简化蓝牙低功耗通信过程的方法和功能。它的使用可以大大减少开发工作的复杂性和难度,提高开发效率,并帮助我们更好地实现与BLE设备的交互。 ### 回答2: Android BLE工具类是一种用于简化与BLE(蓝牙低功耗)设备通信的工具类。它提供了一系列便捷的方法和功能,使开发者能够更容易地实现BLE设备的连接、搜索、数据传输等操作。 首先,Android BLE工具类可以帮助开发者建立与BLE设备的连接。它封装了与设备的GATT(通用属性)连接过程,使连接操作更加简单和高效。通过调用相应的方法,开发者可以轻松地与设备进行连接,并可以处理连接成功或失败的回调。 其次,该工具类还提供了BLE设备搜索的功能。开发者可以使用相应的方法启动BLE设备搜索,并可以设置搜索的时间和过滤条件。搜索结果将以回调方式返回,开发者可以根据搜索结果选择要连接的设备。 此外,该工具类还封装了BLE设备的通信接口,使开发者能够方便地发送和接收数据。开发者可以使用相应的方法向设备发送命令或请求,并可以处理设备返回的数据。这些方法包括读取特征值、写入特征值、设置通知等。 最后,该工具类还提供了其他一些便捷的功能,如断开设备连接、设置连接超时、监测设备状态等。开发者可以根据自己的需求选择使用这些功能来提高开发效率和用户体验。 总之,Android BLE工具类是一种能够简化与BLE设备通信的工具,它提供了连接设备、搜索设备、数据传输等一系列功能,帮助开发者更方便地实现BLE设备的相关操作。 ### 回答3: Android BLE(Bluetooth Low Energy)工具类是一种在Android平台上使用的工具类,用于简化与蓝牙低功耗设备通信的操作。 Android BLE工具类的主要功能包括以下几个方面: 1. 初始化:Android BLE工具类提供初始化蓝牙适配器的功能,以及检查设备是否支持BLE功能。 2. 扫描设备:Android BLE工具类提供开始和停止扫描BLE设备的方法,并且可以根据设备的UUID或名称过滤扫描结果。 3. 连接设备:Android BLE工具类可以连接指定的BLE设备,并提供连接成功、连接失败、断开连接等回调方法,方便开发者处理连接状态。 4. 发现服务和特征值:Android BLE工具类支持发现BLE设备的服务和特征值,通过服务和特征值,开发者可以读取、写入及监听BLE设备的数据。 5. 数据操作:Android BLE工具类可以进行BLE设备的数据读取、写入及监听操作,开发者可以根据实际需求进行相应的数据处理。 6. 错误处理:Android BLE工具类提供BLE操作过程中可能发生的错误处理方法,开发者可以根据错误码进行相应的处理,以增强应用的稳定性。 总的来说,Android BLE工具类简化了与BLE设备的通信操作,提供了易于使用的API接口,方便开发者快速开发与蓝牙低功耗设备的交互功能。但是对于复杂的BLE设备通信需求,可能需要根据实际情况自行进行定制和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HONikn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值