一:获取应用名称 版本名称 版本号
package com.zhy.utils;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
/** * 跟App相关的辅助类 * * @author zhy * */
public class AppUtils{
private AppUtils(){
/* cannot be instantiated */
throw new UnsupportedOperationException("cannot be instantiated");
}
/** * 获取应用程序名称 */
public static String getAppName(Context context){
try{
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo(
context.getPackageName(), 0);
int labelRes = packageInfo.applicationInfo.labelRes;
return context.getResources().getString(labelRes);
} catch (NameNotFoundException e){
e.printStackTrace();
}
return null;
}
/** * [获取应用程序版本名称信息] * * @param context * @return 当前应用的版本名称 */
public static String getVersionName(Context context){
try{
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo = packageManager.getPackageInfo(
context.getPackageName(), 0);
return packageInfo.versionName;
} catch (NameNotFoundException e){
e.printStackTrace();
}
return null;
}
/**[获取应用程序版本号] * @param context * @return应用程序版本号 */
public static int getVersionCode(Context context){
int versionCode = 0;
try{
// 获取软件版本号,对应AndroidManifest.xml下android:versionCode
versionCode = context.getPackageManager().getPackageInfo("com.zhy.zhy_android_utils", 0).versionCode;
} catch (NameNotFoundException e){
e.printStackTrace();
}
return versionCode;
}
}
二 屏幕尺寸转换
package com.zhy.utils;
import android.content.Context;
import android.util.TypedValue;
/** * 常用单位转换的辅助类 * * @author zhy * */
public class DensityUtils{
private DensityUtils(){
/* cannot be instantiated */
throw new UnsupportedOperationException("cannot be instantiated");
}
/** * dp转px * * @param context * @param val * @return */
public static int dp2px(Context context, float dpVal){
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
dpVal, context.getResources().getDisplayMetrics());
}
/** * sp转px * * @param context * @param val * @return */
public static int sp2px(Context context, float spVal){
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
spVal, context.getResources().getDisplayMetrics());
}
/** * px转dp * * @param context * @param pxVal * @return */
public static float px2dp(Context context, float pxVal){
final float scale = context.getResources().getDisplayMetrics().density;
return (pxVal / scale);
}
/** * px转sp * * @param fontScale * @param pxVal * @return */
public static float px2sp(Context context, float pxVal){
return (pxVal / context.getResources().getDisplayMetrics().scaledDensity);
}
}
三:Base64加密
package com.zhy.utils;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
public class Encoder {
/** * @param value * string to be encoded * @return encoded parameters string */
public static String encode(String value) {
String encoded = null;
try {
encoded = URLEncoder.encode(value, "UTF-8");
} catch (UnsupportedEncodingException ignore) {
}
StringBuffer buf = new StringBuffer(encoded.length());
char focus;
for (int i = 0; i < encoded.length(); i++) {
focus = encoded.charAt(i);
if (focus == '*') {
buf.append("%2A");
} else if (focus == '+') {
buf.append("%20");
} else if (focus == '%' && (i + 1) < encoded.length() && encoded.charAt(i + 1) == '7'
&& encoded.charAt(i + 2) == 'E') {
buf.append('~');
i += 2;
} else {
buf.append(focus);
}
}
return buf.toString();
}
}
四:弹出软键盘
package com.zhy.utils;
import android.content.Context;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
/** * 打开或关闭软键盘 * * @author zhy * */
public class KeyBoardUtils {
/** * 打卡软键盘 * * @param mEditText * 输入框 * @param mContext * 上下文 */
public static void openKeybord(EditText mEditText, Context mContext){
InputMethodManager imm = (InputMethodManager) mContext
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(mEditText, InputMethodManager.RESULT_SHOWN);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,
InputMethodManager.HIDE_IMPLICIT_ONLY);
}
/** * 关闭软键盘 * * @param mEditText * 输入框 * @param mContext * 上下文 */
public static void closeKeybord(EditText mEditText, Context mContext){
InputMethodManager imm = (InputMethodManager) mContext
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
}
}
五:网络诊断工具类
package com.zhy.utils;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
/** * 跟网络相关的工具类 * * @author zhy * */
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;
}
/** * 打开网络设置界面 */
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);
}
}
六 :获得屏幕相关的辅助工具类
package com.zhy.utils;
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;
/** * 获得屏幕相关的辅助类 * * @author zhy * */
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;
}
}
七:SD卡工具类
package com.zhy.utils;
import java.io.File;
import android.os.Environment;
import android.os.StatFs;
/** * SD卡相关的辅助类 * * @author zhy * */
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 */
@SuppressWarnings("deprecation")
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可用空间,内部存储可用空间 */
@SuppressWarnings("deprecation")
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();
}
}
八 sp工具类
package com.zhy.utils;
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();
}
}
}
Demo下载