Android主流工具类的封装和使用(一)
具体使用和案例可以查看https://github.com/zhiyongshuangquan/utils
一:
Intent 工具类封装和使用
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import java.io.Serializable;
/**
* Created by xfc on 2016/12/28.
*/
public class IntentUtil {
private static String BUNDLE_KEY = "bundle";
public static void startActivity(Context context, Class cls) {
Intent intent = new Intent();
intent.setClass(context, cls);
context.startActivity(intent);
}
public static void startActivityAndFinishFirst(Context context, Class cls) {
Intent intent = new Intent();
intent.setClass(context, cls);
context.startActivity(intent);
((Activity) context).finish();
}
public static void startActivityForResult(Context context, Class cls, int requestCode, Bundle bundle) {
Intent intent = new Intent();
intent.setClass(context, cls);
intent.putExtra(BUNDLE_KEY, bundle);
((Activity) context).startActivityForResult(intent, requestCode);
}
public static void startActivity(Context context, Class cls, Bundle bundle) {
Intent intent = new Intent();
intent.setClass(context, cls);
intent.putExtra(BUNDLE_KEY, bundle);
context.startActivity(intent);
}
public static void startActivityAndFinish(Context context, Class cls, Bundle bundle) {
Intent intent = new Intent();
intent.setClass(context, cls);
intent.putExtra(BUNDLE_KEY, bundle);
context.startActivity(intent);
((Activity) context).finish();
}
public static void startActivity(Context context, Class cls, String key, Object value) {
Intent intent = new Intent();
intent.setClass(context, cls);
Bundle bundle = new Bundle();
if (value.getClass() == String.class) {
bundle.putString(key, String.valueOf(value));
} else if (value.getClass() == Integer.class) {
bundle.putInt(key, (Integer) value);
} else if (value.getClass() == Boolean.class) {
bundle.putBoolean(key, (Boolean) value);
} else {
bundle.putSerializable(key, (Serializable) value);
}
intent.putExtra(BUNDLE_KEY, bundle);
context.startActivity(intent);
}
public static Bundle getIntentBundle(Activity activity) {
if (activity.getIntent().getBundleExtra(BUNDLE_KEY) == null)
return null;
return activity.getIntent().getBundleExtra(BUNDLE_KEY);
}
public static boolean getIntentBoolean(Activity activity, String key) {
if (activity.getIntent().getBundleExtra(BUNDLE_KEY) != null)
return activity.getIntent().getBundleExtra(BUNDLE_KEY).getBoolean(key, false);
return false;
}
public static Serializable getIntentSerializable(Activity activity, String key) {
if (activity.getIntent().getBundleExtra(BUNDLE_KEY) == null)
return null;
return activity.getIntent().getBundleExtra(BUNDLE_KEY).getSerializable(key);
}
public static String getIntentString(Activity activity, String key) {
if (activity.getIntent().getBundleExtra(BUNDLE_KEY) == null)
return "";
return activity.getIntent().getBundleExtra(BUNDLE_KEY).getString(key);
}
public static int getIntentInt(Activity activity, String key) {
return activity.getIntent().getBundleExtra(BUNDLE_KEY).getInt(key);
}
public static long getIntentLong(Activity activity, String key) {
return activity.getIntent().getBundleExtra(BUNDLE_KEY).getLong(key);
}
public static double getIntentDouble(Activity activity, String key) {
return activity.getIntent().getBundleExtra(BUNDLE_KEY).getDouble(key);
}
public static void startActivityAndFinishLine(Context context, Class cls) {
Intent intent = new Intent();
intent.setClass(context, cls);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
}
public static void startActivityAndFinishLine(Context context, Class cls, String key, String value) {
Intent intent = new Intent();
intent.setClass(context, cls);
Bundle bundle = new Bundle();
bundle.putString(key, value);
intent.putExtra(BUNDLE_KEY, bundle);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
((Activity) context).finish();
}
}
二:栈管理activity 封装
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import java.util.Stack;
/**
* Created by xfc on 2016-08-29.
*/
public class AppManager {
// Activity栈
private static Stack<Activity> activityStack;
// 单例模式
private static AppManager instance;
private AppManager() {
}
/**
* 单一实例
*/
public static AppManager getAppManager() {
if (instance == null) {
instance = new AppManager();
}
return instance;
}
/**
* 添加Activity到堆栈
*/
public void addActivity(Activity activity) {
if (activityStack == null) {
activityStack = new Stack<Activity>();
}
activityStack.add(activity);
}
/**
* 获取当前Activity(堆栈中最后一个压入的)
*/
public Activity currentActivity() {
Activity activity = activityStack.lastElement();
return activity;
}
/**
* 结束当前Activity(堆栈中最后一个压入的)
*/
public void finishActivity() {
Activity activity = activityStack.lastElement();
finishActivity(activity);
}
/**
* 结束指定的Activity
*/
public void finishActivity(Activity activity) {
if (activity != null) {
activityStack.remove(activity);
activity.finish();
activity = null;
}
}
/**
* 结束指定类名的Activity
*/
public void finishActivity(Class<?> cls) {
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
}
}
}
/**
* 结束所有Activity
*/
public void finishAllActivity() {
for (int i = 0; i < activityStack.size(); i++) {
if (null != activityStack.get(i)) {
activityStack.get(i).finish();
}
}
activityStack.clear();
}
/**
* 退出应用程序
*/
public void AppExit(Context context) {
try {
finishAllActivity();
ActivityManager activityMgr = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
activityMgr.killBackgroundProcesses(context.getPackageName());
System.exit(0);
} catch (Exception e) {
}
}
}
使用的时候请直接封装在baseActivity里面案例如下所示:
public abstract class BaseActivityxfc extends AppCompatActivity implements View.OnClickListener {
private Unbinder unbind;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutId());
unbind = ButterKnife.bind(this);
AppManager.getAppManager().addActivity(this);
onView();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (null != this.getCurrentFocus()) {
/**
* 点击空白位置 隐藏软键盘
*/
InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
return mInputMethodManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 0);
}
return super.onTouchEvent(event);
}
/**
* 进行销毁解绑
*/
@Override
protected void onDestroy() {
super.onDestroy();
if (unbind != null) {
unbind.unbind();
}
}
/**
* 加载布局
*/
protected abstract int getLayoutId();
/**
* 初始化操作
*/
protected abstract void onView();
}
三:log打印工具类
import android.util.Log;
/**
* Created by xfc on 2017-01-05.
*/
/**
* log打印工具类
*/
public class LogUtil {
private LogUtil() {
/* cannot be instantiated */
throw new UnsupportedOperationException("cannot be instantiated");
}
public static boolean isDebug;// 是否需要打印bug,在application的onCreate函数里面初始化
private static final String TAG = "tag";
// 下面四个是默认tag的函数
public static void i(String msg) {
if (isDebug)
Log.i(TAG, msg);
}
public static void d(String msg) {
if (isDebug)
Log.d(TAG, msg);
}
public static void e(String msg) {
if (isDebug)
Log.e(TAG, msg);
}
public static void v(String msg) {
if (isDebug)
Log.v(TAG, msg);
}
// 下面是传入自定义tag的函数
public static void i(String tag, String msg) {
if (isDebug)
Log.i(tag, msg);
}
public static void d(String tag, String msg) {
if (isDebug)
Log.i(tag, msg);
}
public static void e(String tag, String msg) {
if (isDebug)
Log.i(tag, msg);
}
public static void v(String tag, String msg) {
if (isDebug)
Log.i(tag, msg);
}
/**
* 截断输出日志
*
* @param msg
*/
public static void eLength(String tag, String msg) {
if (isDebug) {
if (tag == null || tag.length() == 0
|| msg == null || msg.length() == 0)
return;
int segmentSize = 3 * 1024;
long length = msg.length();
if (length <= segmentSize) {// 长度小于等于限制直接打印
Log.e(tag, msg);
} else {
while (msg.length() > segmentSize) {// 循环分段打印日志
String logContent = msg.substring(0, segmentSize);
msg = msg.replace(logContent, "");
Log.e(tag, logContent);
}
Log.e(tag, msg);// 打印剩余日志
}
}
}
/**
* 分段打印出较长log文本
*
* @param log 原log文本
* @param
*/
public static void showLogCompletion(String string, String log) {
if (log.length() > 4000) {
for (int i = 0; i < log.length(); i += 4000) {
if (i + 4000 < log.length())
Log.i(string + i, log.substring(i, i + 4000));
else
Log.i(string + i, log.substring(i, log.length()));
}
} else
Log.i(string, log);
}
}
四:Md5加密工具类
import java.security.MessageDigest;
/**
* Created by xfc on 2016-12-29.
*/
//用于MD5加密
public class MD5Util {
public static String md5(String str) {
String digest = null;
StringBuffer buffer = new StringBuffer();
try {
MessageDigest digester = MessageDigest.getInstance("md5");
byte[] digestArray = digester.digest(str.getBytes());
for (int i = 0; i < digestArray.length; i++) {
buffer.append(String.format("%02x", digestArray[i]));
}
digest = buffer.toString();
} catch (Exception e) {
e.printStackTrace();
}
return digest;
}
}
五:时间格式化工具类
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* Created by xfc on 2017/8/28.
*/
public class TimeUtil {
/**
* 从时间(毫秒)中提取出日期
*
* @param millisecond
* @return
*/
public static String getDateFromMillisecond(Long millisecond) {
Date date = null;
try {
date = new Date(millisecond);
} catch (Exception e) {
e.printStackTrace();
}
Calendar current = Calendar.getInstance();
今天
Calendar today = Calendar.getInstance();
today.set(Calendar.YEAR, current.get(Calendar.YEAR));
today.set(Calendar.MONTH, current.get(Calendar.MONTH));
today.set(Calendar.DAY_OF_MONTH, current.get(Calendar.DAY_OF_MONTH));
// Calendar.HOUR——12小时制的小时数 Calendar.HOUR_OF_DAY——24小时制的小时数
today.set(Calendar.HOUR_OF_DAY, 0);
today.set(Calendar.MINUTE, 0);
today.set(Calendar.SECOND, 0);
//昨天
Calendar yesterday = Calendar.getInstance();
yesterday.set(Calendar.YEAR, current.get(Calendar.YEAR));
yesterday.set(Calendar.MONTH, current.get(Calendar.MONTH));
yesterday.set(Calendar.DAY_OF_MONTH, current.get(Calendar.DAY_OF_MONTH) - 1);
yesterday.set(Calendar.HOUR_OF_DAY, 0);
yesterday.set(Calendar.MINUTE, 0);
yesterday.set(Calendar.SECOND, 0);
// 今年
Calendar thisYear = Calendar.getInstance();
thisYear.set(Calendar.YEAR, current.get(Calendar.YEAR));
thisYear.set(Calendar.MONTH, 0);
thisYear.set(Calendar.DAY_OF_MONTH, 0);
thisYear.set(Calendar.HOUR_OF_DAY, 0);
thisYear.set(Calendar.MINUTE, 0);
thisYear.set(Calendar.SECOND, 0);
current.setTime(date);
//今年以前
if (current.before(thisYear)) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = format.format(date);
return dateStr;
} else if (current.after(today)) {
return "今天";
} else if (current.before(today) && current.after(yesterday)) {
return "昨天";
} else {
SimpleDateFormat format = new SimpleDateFormat("MM-dd");
String dateStr = format.format(date);
return dateStr;
}
}
/**
* 从时间(毫秒)中提取出时间(时:分)
* 时间格式: 时:分
*
* @param millisecond
* @return
*/
public static String getTimeFromMillisecond(Long millisecond) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");
Date date = new Date(millisecond);
String timeStr = simpleDateFormat.format(date);
return timeStr;
}
/**
* 将毫秒转化成固定格式的时间
* 时间格式: yyyy-MM-dd HH:mm:ss
*
* @param millisecond
* @return
*/
public static String getDateTimeFromMillisecond(Long millisecond) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(millisecond);
String dateStr = simpleDateFormat.format(date);
return dateStr;
}
/**
* 将毫秒转化成固定格式的时间
* 时间格式: yyyy-MM-dd
*
* @param millisecond
* @return
*/
public static String getDateTime(Long millisecond) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date(millisecond);
String dateStr = simpleDateFormat.format(date);
return dateStr;
}
/**
* 将时间转化成毫秒
* 时间格式: yyyy-MM-dd HH:mm:ss
*
* @param time
* @return
*/
public static Long timeStrToSecond(String time) {
try {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Long second = format.parse(time).getTime();
return second;
} catch (Exception e) {
e.printStackTrace();
}
return -1l;
}
/**
* 获取时间间隔
*
* @param millisecond
* @return
*/
public static String getSpaceTime(Long millisecond) {
Calendar calendar = Calendar.getInstance();
Long currentMillisecond = calendar.getTimeInMillis();
//间隔秒
Long spaceSecond = (currentMillisecond - millisecond) / 1000;
//一分钟之内
if (spaceSecond >= 0 && spaceSecond < 60) {
return "片刻之前";
}
//一小时之内
else if (spaceSecond / 60 > 0 && spaceSecond / 60 < 60) {
return spaceSecond / 60 + "分钟之前";
}
//一天之内
else if (spaceSecond / (60 * 60) > 0 && spaceSecond / (60 * 60) < 24) {
return spaceSecond / (60 * 60) + "小时之前";
}
//3天之内
else if (spaceSecond / (60 * 60 * 24) > 0 && spaceSecond / (60 * 60 * 24) < 3) {
return spaceSecond / (60 * 60 * 24) + "天之前";
} else {
return getDateTimeFromMillisecond(millisecond);
}
}
}
六:获取版本号和当前版本工具类
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
/**
* Created by xfc on 2016-12-08.
*/
//获取版本名和版本号
public class VersionUtil {
/**
* get App versionCode
*
* @param context
* @return
*/
public static String getVersionCode(Context context) {
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo;
String versionCode = "";
try {
packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
versionCode = packageInfo.versionCode + "";
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return versionCode;
}
/**
* get App versionName
*
* @param context
* @return
*/
public static String getVersionName(Context context) {
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo;
String versionName = "";
try {
packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
versionName = packageInfo.versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return versionName;
}
}