Android开发:Android快速开发不可或缺的11个工具类 (二)
16lz
2021-12-10
Android快速开发不可或缺的11个工具类 (一)续篇。
NetUtils
NetUtils是判断网络状态的工具类,在网络时代,开发中绝对的不可或缺。
import android.app.Activity;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.net.ConnectivityManager;import android.net.NetworkInfo;//跟网络相关的工具类public class NetUtils{private NetUtils(){/* cannot be instantiated */throw new UnsupportedOperationException("cannot be instantiated");}/** * 判断网络是否连接 * * @param context * @return */public static boolean isConnected(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){return true;}}}return false;}/** * 判断是否是wifi连接 */public static boolean isWifi(Context context){ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);if (cm == null)return false;return cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI;}/** * 打开网络设置界面 */public static void openSetting(Activity activity){Intent intent = new Intent("/");ComponentName cm = new ComponentName("com.android.settings","com.android.settings.WirelessSettings");intent.setComponent(cm);intent.setAction("android.intent.action.VIEW");activity.startActivityForResult(intent, 0);}}
ScreenUtils
可用于获取屏幕宽高,截屏的工具类
import android.app.Activity;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Rect;import android.util.DisplayMetrics;import android.view.View;import android.view.WindowManager;//获得屏幕相关的辅助类public class ScreenUtils{private ScreenUtils(){/* cannot be instantiated */throw new UnsupportedOperationException("cannot be instantiated");}/** * 获得屏幕高度 * * @param context * @return */public static int getScreenWidth(Context context){WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);DisplayMetrics outMetrics = new DisplayMetrics();wm.getDefaultDisplay().getMetrics(outMetrics);return outMetrics.widthPixels;}/** * 获得屏幕宽度 * * @param context * @return */public static int getScreenHeight(Context context){WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);DisplayMetrics outMetrics = new DisplayMetrics();wm.getDefaultDisplay().getMetrics(outMetrics);return outMetrics.heightPixels;}/** * 获得状态栏的高度 * * @param context * @return */public static int getStatusHeight(Context context){int statusHeight = -1;try{Class<?> clazz = Class.forName("com.android.internal.R$dimen");Object object = clazz.newInstance();int height = Integer.parseInt(clazz.getField("status_bar_height").get(object).toString());statusHeight = context.getResources().getDimensionPixelSize(height);} catch (Exception e){e.printStackTrace();}return statusHeight;}/** * 获取当前屏幕截图,包含状态栏 * * @param activity * @return */public static Bitmap snapShotWithStatusBar(Activity activity){View view = activity.getWindow().getDecorView();view.setDrawingCacheEnabled(true);view.buildDrawingCache();Bitmap bmp = view.getDrawingCache();int width = getScreenWidth(activity);int height = getScreenHeight(activity);Bitmap bp = null;bp = Bitmap.createBitmap(bmp, 0, 0, width, height);view.destroyDrawingCache();return bp;}/** * 获取当前屏幕截图,不包含状态栏 * * @param activity * @return */public static Bitmap snapShotWithoutStatusBar(Activity activity){View view = activity.getWindow().getDecorView();view.setDrawingCacheEnabled(true);view.buildDrawingCache();Bitmap bmp = view.getDrawingCache();Rect frame = new Rect();activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);int statusBarHeight = frame.top;int width = getScreenWidth(activity);int height = getScreenHeight(activity);Bitmap bp = null;bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height- statusBarHeight);view.destroyDrawingCache();return bp;}}
SDCardUtils
外部存储相关辅助工具类
import java.io.File;import android.os.Environment;import android.os.StatFs;//SD卡相关的辅助类public class SDCardUtils{private SDCardUtils(){/* cannot be instantiated */throw new UnsupportedOperationException("cannot be instantiated");}/** * 判断SDCard是否可用 * * @return */public static boolean isSDCardEnable(){return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);}/** * 获取SD卡路径 * * @return */public static String getSDCardPath(){return Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator;}/** * 获取SD卡的剩余容量 单位byte * * @return */public static long getSDCardAllSize(){if (isSDCardEnable()){StatFs stat = new StatFs(getSDCardPath());// 获取空闲的数据块的数量long availableBlocks = (long) stat.getAvailableBlocks() - 4;// 获取单个数据块的大小(byte)long freeBlocks = stat.getAvailableBlocks();return freeBlocks * availableBlocks;}return 0;}/** * 获取指定路径所在空间的剩余可用容量字节数,单位byte * * @param filePath * @return 容量字节 SDCard可用空间,内部存储可用空间 */public static long getFreeBytes(String filePath){// 如果是sd卡的下的路径,则获取sd卡可用容量if (filePath.startsWith(getSDCardPath())){filePath = getSDCardPath();} else{// 如果是内部存储的路径,则获取内存存储的可用容量filePath = Environment.getDataDirectory().getAbsolutePath();}StatFs stat = new StatFs(filePath);long availableBlocks = (long) stat.getAvailableBlocks() - 4;return stat.getBlockSize() * availableBlocks;}/** * 获取系统存储路径 * * @return */public static String getRootDirectoryPath(){return Environment.getRootDirectory().getAbsolutePath();}}
SPUtils
SharedPreferences工具类,作为存储和获取data下相关文件工具类,对SharedPreferences进行封装,使其使用更简单。
import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.Map;import android.content.Context;import android.content.SharedPreferences;public class SPUtils{public SPUtils(){/* cannot be instantiated */throw new UnsupportedOperationException("cannot be instantiated");}/** * 保存在手机里面的文件名 */public static final String FILE_NAME = "share_data";/** * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法 * * @param context * @param key * @param object */public static void put(Context context, String key, Object object){SharedPreferences sp = context.getSharedPreferences(FILE_NAME,Context.MODE_PRIVATE);SharedPreferences.Editor editor = sp.edit();if (object instanceof String){editor.putString(key, (String) object);} else if (object instanceof Integer){editor.putInt(key, (Integer) object);} else if (object instanceof Boolean){editor.putBoolean(key, (Boolean) object);} else if (object instanceof Float){editor.putFloat(key, (Float) object);} else if (object instanceof Long){editor.putLong(key, (Long) object);} else{editor.putString(key, object.toString());}SharedPreferencesCompat.apply(editor);}/** * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值 * * @param context * @param key * @param defaultObject * @return */public static Object get(Context context, String key, Object defaultObject){SharedPreferences sp = context.getSharedPreferences(FILE_NAME,Context.MODE_PRIVATE);if (defaultObject instanceof String){return sp.getString(key, (String) defaultObject);} else if (defaultObject instanceof Integer){return sp.getInt(key, (Integer) defaultObject);} else if (defaultObject instanceof Boolean){return sp.getBoolean(key, (Boolean) defaultObject);} else if (defaultObject instanceof Float){return sp.getFloat(key, (Float) defaultObject);} else if (defaultObject instanceof Long){return sp.getLong(key, (Long) defaultObject);}return null;}/** * 移除某个key值已经对应的值 * * @param context * @param key */public static void remove(Context context, String key){SharedPreferences sp = context.getSharedPreferences(FILE_NAME,Context.MODE_PRIVATE);SharedPreferences.Editor editor = sp.edit();editor.remove(key);SharedPreferencesCompat.apply(editor);}/** * 清除所有数据 * * @param context */public static void clear(Context context){SharedPreferences sp = context.getSharedPreferences(FILE_NAME,Context.MODE_PRIVATE);SharedPreferences.Editor editor = sp.edit();editor.clear();SharedPreferencesCompat.apply(editor);}/** * 查询某个key是否已经存在 * * @param context * @param key * @return */public static boolean contains(Context context, String key){SharedPreferences sp = context.getSharedPreferences(FILE_NAME,Context.MODE_PRIVATE);return sp.contains(key);}/** * 返回所有的键值对 * * @param context * @return */public static Map<String, ?> getAll(Context context){SharedPreferences sp = context.getSharedPreferences(FILE_NAME,Context.MODE_PRIVATE);return sp.getAll();}/** * 创建一个解决SharedPreferencesCompat.apply方法的一个兼容类 * * @author zhy * */private static class SharedPreferencesCompat{private static final Method sApplyMethod = findApplyMethod();/** * 反射查找apply的方法 * * @return */@SuppressWarnings({ "unchecked", "rawtypes" })private static Method findApplyMethod(){try{Class clz = SharedPreferences.Editor.class;return clz.getMethod("apply");} catch (NoSuchMethodException e){}return null;}/** * 如果找到则使用apply执行,否则使用commit * * @param editor */public static void apply(SharedPreferences.Editor editor){try{if (sApplyMethod != null){sApplyMethod.invoke(editor);return;}} catch (IllegalArgumentException e){} catch (IllegalAccessException e){} catch (InvocationTargetException e){}editor.commit();}}}
ToastUtils
对系统Toast的封装,用起来更简单方便
import android.content.Context;import android.widget.Toast; //Toast统一管理类public class ToastUtils{private ToastUtils(){/* cannot be instantiated */throw new UnsupportedOperationException("cannot be instantiated");}public static boolean isShow = true;/** * 短时间显示Toast * * @param context * @param message */public static void showShort(Context context, CharSequence message){if (isShow)Toast.makeText(context, message, Toast.LENGTH_SHORT).show();}/** * 短时间显示Toast * * @param context * @param message */public static void showShort(Context context, int message){if (isShow)Toast.makeText(context, message, Toast.LENGTH_SHORT).show();}/** * 长时间显示Toast * * @param context * @param message */public static void showLong(Context context, CharSequence message){if (isShow)Toast.makeText(context, message, Toast.LENGTH_LONG).show();}/** * 长时间显示Toast * * @param context * @param message */public static void showLong(Context context, int message){if (isShow)Toast.makeText(context, message, Toast.LENGTH_LONG).show();}/** * 自定义显示Toast时间 * * @param context * @param message * @param duration */public static void show(Context context, CharSequence message, int duration){if (isShow)Toast.makeText(context, message, duration).show();}/** * 自定义显示Toast时间 * * @param context * @param message * @param duration */public static void show(Context context, int message, int duration){if (isShow)Toast.makeText(context, message, duration).show();}}
今天,Android不可或缺的开发工具类集合的分享就到这里,上篇为Android快速开发不可或缺的11个工具类 (一)。
本文转载自:http://www.devstore.cn/code/info/363.htm。
如无特殊说明,文章均为xiong_it原创,本文链接:http://blog.csdn.net/xiong_it/article/details/46005429。
更多相关文章
- Android(安卓)中数据库查询方法 query() 中的 selectionArgs 的
- Android利用wireshark抓取网络数据包
- Android(安卓)获取屏幕高宽度,密度,通知栏高度,截图等常用方法
- Android(安卓)关于获取摄像头帧数据
- Android(安卓)创建SQLite数据库(一)
- Android测试框架或者工具对比
- 代码:android崩溃日志收集和处理
- mybatisplus的坑 insert标签insert into select无参数问题的解决
- python起点网月票榜字体反爬案例