您的位置:首页 > 移动开发 > Android开发

android utils 常用工具类

2015-10-17 15:21 453 查看
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.location.LocationManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.os.Environment;
import android.os.StatFs;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;

import com.zhuangxiaomi.cloudsupervisor.R;
import com.zhuangxiaomi.cloudsupervisor.view.SystemBarTintManager;

public class CommonUtil {
public static boolean hasSdcard() {

String status = Environment.getExternalStorageState();
if (status.equals(Environment.MEDIA_MOUNTED)) {
return true;
} else {
return false;
}
}

public static void showSoftPad(Context context, EditText edit) {
((InputMethodManager) context
.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(
edit, 0);
}

public static void hideSoftPad(Activity activity) {

InputMethodManager inputMethodManager = (InputMethodManager) activity
.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus()
.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}

public static boolean isServiceRunning(Context context, String serviceName) {

ActivityManager activityManager = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningServiceInfo> serviceInfo = activityManager
.getRunningServices(100);
for (RunningServiceInfo info : serviceInfo) {

String name = info.service.getClassName();
if (name.equals(serviceName)) {
return true;
}
}
return false;

}

public static String getPackageName(Context context) {

PackageManager packageManager = context.getPackageManager();
PackageInfo packInfo;
try {
packInfo = packageManager.getPackageInfo(context.getPackageName(),
0);
return packInfo.packageName;
} catch (NameNotFoundException e) {
return null;
}
}

public static long getAvailableInternalMemorySize() {
File path = Environment.getDataDirectory(); // 获取数据目录
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return availableBlocks * blockSize;
}

public static boolean isGpsOpen(final Context context) {
LocationManager locationManager = (LocationManager) context
.getSystemService(Context.LOCATION_SERVICE);
boolean gps = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
boolean network = locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (gps || network) {
return true;
}

return false;
}

public static String getCurrentActivity(Context context) {
ActivityManager manager = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> runningTasks = manager.getRunningTasks(1);
RunningTaskInfo cinfo = runningTasks.get(0);
ComponentName component = cinfo.topActivity;
return component.getShortClassName();
}

public static int getScreenWidth(Context context) {
WindowManager wm = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(dm);
return dm.widthPixels;
}

public static int getScreenHeight(Context context) {
WindowManager wm = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(dm);
return dm.heightPixels;
}

public static Object cloneObject(Object obj) {
Object result = null;
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream out;
try {
out = new ObjectOutputStream(byteOut);
out.writeObject(obj);

ByteArrayInputStream byteIn = new ByteArrayInputStream(
byteOut.toByteArray());
ObjectInputStream in = new ObjectInputStream(byteIn);
result = in.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

return result;
}

public static final long ONE_MINUTE = 60 * 1000;

public static final long ONE_HOUR = 60 * ONE_MINUTE;

public static final long ONE_DAY = 24 * ONE_HOUR;

public static final long ONE_MONTH = 30 * ONE_DAY;

public static final long ONE_YEAR = 12 * ONE_MONTH;

/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}

/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}

@SuppressLint("NewApi")
public static String genDeviceId() {
String raw = "";
try {
raw += android.os.Build.BRAND;
} catch (Exception e) {
e.printStackTrace();
}
try {
raw += android.os.Build.MODEL;
} catch (Exception e) {
e.printStackTrace();
}
try {
raw += android.os.Build.BOOTLOADER;
} catch (Exception e) {
e.printStackTrace();
}
try {
raw += android.os.Build.DISPLAY;
} catch (Exception e) {
e.printStackTrace();
}
try {
raw += android.os.Build.HARDWARE;
} catch (Exception e) {
e.printStackTrace();
}
try {
raw += android.os.Build.ID;
} catch (Exception e) {
e.printStackTrace();
}
try {
raw += android.os.Build.SERIAL;
} catch (Exception e) {
e.printStackTrace();
}
try {
raw += android.os.Build.CPU_ABI;
} catch (Exception e) {
e.printStackTrace();
}
try {
raw += android.os.Build.PRODUCT;
} catch (Exception e) {
e.printStackTrace();
}

return GetMD5Code(raw);
}

// 全局数组
private final static String[] strDigits = {"0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};

// 返回形式为数字跟字符串
private static String byteToArrayString(byte bByte) {
int iRet = bByte;
if (iRet < 0) {
iRet += 256;
}
int iD1 = iRet / 16;
int iD2 = iRet % 16;
return strDigits[iD1] + strDigits[iD2];
}

// 转换字节数组为16进制字串
private static String byteToString(byte[] bByte) {
StringBuffer sBuffer = new StringBuffer();
for (int i = 0; i < bByte.length; i++) {
sBuffer.append(byteToArrayString(bByte[i]));
}
return sBuffer.toString();
}

public static String GetMD5Code(String strObj) {
String resultString = null;
try {
resultString = new String(strObj);
MessageDigest md = MessageDigest.getInstance("MD5");
// md.digest() 该函数返回值为存放哈希值结果的byte数组
resultString = byteToString(md.digest(strObj.getBytes()));
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
}
return resultString;
}

public static String getVersionName(Context context) {
String name = "1.0.0";
PackageManager packageManager = context.getPackageManager();
PackageInfo packInfo;
try {
packInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
name = packInfo.versionName;
return name;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return name;
}

public static boolean isPhoneNumber(String phoneNumber) {
if (TextUtils.isEmpty(phoneNumber)) return false;
if (phoneNumber.length() == 11) {
String pattern = "(^(13\\d|14[57]|15[^4,\\D]|17[678]|18\\d)\\d{8}|170[059]\\d{7})$";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(phoneNumber);
return m.find();//是手机号
} else
return false;
}

public static String getDeviceId(Context context) {
String imei = "";
try {
TelephonyManager mTelephonyMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
imei = mTelephonyMgr.getDeviceId();
if (TextUtils.isEmpty(imei))
imei = genDeviceId();
} catch (Exception e) {
imei = genDeviceId();
}

return imei;
}

/**
*设置系统状态栏颜色
* @param activity
* @param on
* @param color getResources().getColor(R.color.cs_base_color) or Color.parse...
*/
public static void setSystemStatusBar(Activity activity,boolean on,int color) {
//还需在每个布局文件设置
// android:clipToPadding="true"
//android:fitsSystemWindows="true"
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window win = activity.getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
if (on) {
winParams.flags |= bits;
} else {
winParams.flags &= ~bits;
}
win.setAttributes(winParams);
//https://github.com/hexiaochun/SystemBarTint
SystemBarTintManager tintManager = new SystemBarTintManager(activity);
// enable status bar tint
tintManager.setStatusBarTintEnabled(true);
// enable navigation bar tint
//		tintManager.setNavigationBarTintEnabled(true);

// set a custom tint color for all system bars
tintManager.setTintColor(color);
// set a custom navigation bar resource
//		tintManager.setNavigationBarTintResource(R.drawable.my_tint);
// set a custom status bar drawable
//		tintManager.setStatusBarTintDrawable(MyDrawable);
}

}

public static void hideSoft(Context context,EditText edit) {
InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);
}

public static void showSoft(Context context) {
((InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE))
.toggleSoftInput(0, 0);
}

public static boolean isNetWorkConnected(Context context) {
ConnectivityManager conn = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = conn.getActiveNetworkInfo();
return (info != null && info.isConnected());
}

/**
* 处理字符串,如果传入为null,"",返回"未知"
* @param msg
* @return
*/
public static String dealStr(Context context,String msg) {
if (TextUtils.isEmpty(msg)) {
msg = context.getString(R.string.cs_common_unknow);
}
return msg;
}

/**
* 判断APP是否在运行
* @return
*/
public static boolean isAppRunning(Context context){
boolean flag = false;
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
String[] activePackages;
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
activePackages = getActivePackages(am);
} else {
activePackages = getActivePackagesCompat(am);
}

//        Intent intent = new Intent(context, cls);
//        ComponentName cmpName = intent.resolveActivity(context.getPackageManager());
//        if (cmpName != null) { // 说明系统中存在这个activity
//            List<RunningTaskInfo> taskInfoList = am.getRunningTasks(10);
//            for (RunningTaskInfo taskInfo : taskInfoList) {
//                if (taskInfo.baseActivity.equals(cmpName)) { // 说明它已经启动了
//                    flag = true;
//                    break;  //跳出循环,优化效率
//                }
//            }
//        }

if (activePackages != null) {
String currentPkgName = context.getPackageName();
for (String activePackage : activePackages) {
LogUtil.e("aa", "activePackage == " + activePackage + ",current="+currentPkgName);
if (currentPkgName!=null && currentPkgName.equals(activePackage)){
flag = true;
break;
}
}
}

return flag;
}

private  static  String[] getActivePackagesCompat(ActivityManager am) {
final List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
final ComponentName componentName = taskInfo.get(0).topActivity;
final String[] activePackages = new String[1];
activePackages[0] = componentName.getPackageName();
return activePackages;
}

private  static String[] getActivePackages(ActivityManager am) {
final Set<String> activePackages = new HashSet<String>();
final List<ActivityManager.RunningAppProcessInfo> processInfos = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo processInfo : processInfos) {
if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
activePackages.addAll(Arrays.asList(processInfo.pkgList));
}
}
return activePackages.toArray(new String[activePackages.size()]);
}

public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, output);
if (needRecycle) {
bmp.recycle();
}

byte[] result = output.toByteArray();
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}

return result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: