Tools(工具类)(二)
2019-05-11 本文已影响0人
沈溺_16e5
/**
* 调节屏幕亮度
*
* @param value
*/
public static void setBackLight(Activity activity, int value) {
try {
WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
lp.screenBrightness = (float) (value * (0.01));
activity.getWindow().setAttributes(lp);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取sdcard或data的剩余空间
*/
public static long getSdcardFreeSize(String rootPath) {
// 取得sdcard文件路径
StatFs statFs = new StatFs(rootPath);
// 获取block的SIZE
long blocSize = statFs.getBlockSize();
// 可使用的Block的数量
long availaBlock = statFs.getAvailableBlocks();
// 剩余空间大小
long freeSize = availaBlock * blocSize;
return freeSize;
}
/**
* 获得系统版本号
*
* @return
*/
public static String getSDK() {
try {
String release = Build.VERSION.RELEASE;
if (null != release) {
return release;
}
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
/**
* 获取所有的launcher信息
*
* @param context
* @return
*/
private static List<String> getAllTheLauncher(Context context) {
List<String> names = null;
PackageManager pkgMgt = context.getPackageManager();
Intent it = new Intent(Intent.ACTION_MAIN);
it.addCategory(Intent.CATEGORY_HOME);
List<ResolveInfo> ra = pkgMgt.queryIntentActivities(it, 0);
if (ra.size() != 0) {
names = new ArrayList<String>();
}
for (int i = 0; i < ra.size(); i++) {
String packageName = ra.get(i).activityInfo.packageName;
names.add(packageName);
}
return names;
}
/**
* 判断字符串是否为数字(不能判断float类型)
*
* @param str
* @return
*/
public static boolean isNumber(String str) {
if (str.matches("\\d*")) {
return true;
} else {
return false;
}
}
/**
* 判断字符串是否为数字(包含float类型)
*
* @param str
*/
public static boolean isNumeric(String str) {
if (str.matches("\\d+(.\\d+)?")) {
return true;
} else {// 不是数字
return false;
}
}
/**
* 设置Selector
*/
public static StateListDrawable newSelector(Context context, int[] state) {
StateListDrawable bg = new StateListDrawable();
Drawable normal = state[0] == -1 ? null : context.getResources().getDrawable(state[0]);
Drawable pressed = state[1] == -1 ? null : context.getResources().getDrawable(state[1]);
Drawable focused = state[1] == -1 ? null : context.getResources().getDrawable(state[1]);
Drawable unable = state[0] == -1 ? null : context.getResources().getDrawable(state[0]);
// View.PRESSED_ENABLED_STATE_SET
bg.addState(new int[]{android.R.attr.state_pressed, android.R.attr.state_enabled}, pressed);
// View.ENABLED_FOCUSED_STATE_SET
bg.addState(new int[]{android.R.attr.state_enabled, android.R.attr.state_focused}, focused);
// View.ENABLED_STATE_SET
bg.addState(new int[]{android.R.attr.state_enabled}, normal);
// View.FOCUSED_STATE_SET
bg.addState(new int[]{android.R.attr.state_focused}, focused);
// View.WINDOW_FOCUSED_STATE_SET
bg.addState(new int[]{android.R.attr.state_window_focused}, unable);
// View.EMPTY_STATE_SET
bg.addState(new int[]{}, normal);
return bg;
}
/**
* 切换软键盘
*/
public static void switchKeyBoardCancle(Activity activity) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
// 得到InputMethodManager的实例
if (imm.isActive()) {
// 如果开启
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_NOT_ALWAYS);
// 关闭软键盘,开启方法相同,这个方法是切换开启与关闭状态的
}
}
/**
* 打开软键盘
*
* @param mEditText 输入框
*/
public static void openKeybord(EditText mEditText)
{
InputMethodManager imm = (InputMethodManager) BaseApp.getInstance()
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(mEditText, InputMethodManager.RESULT_SHOWN);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,
InputMethodManager.HIDE_IMPLICIT_ONLY);
}
/**
* 关闭软键盘
*
* @param activity
*/
public static void closeKeyBoard(Activity activity,View v) {
/* InputMethodManager im = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(activity.getWindow().getDecorView().getApplicationWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);*/
InputMethodManager imm = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(),0);
}
/**
* 关闭软键盘
*
* @param activity
*/
public static void closeKeyBoard(Activity activity) {
InputMethodManager im = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(activity.getWindow().getDecorView().getApplicationWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
/**
* MD5加密
*/
public static String getMD5Str(String str) {
MessageDigest messageDigest = null;
try {
messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(str.getBytes("UTF-8"));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
byte[] byteArray = messageDigest.digest();
StringBuffer md5StrBuff = new StringBuffer();
for (int i = 0; i < byteArray.length; i++) {
if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) {
md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
} else {
md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
}
}
return md5StrBuff.substring(0, md5StrBuff.length()).toString();
}
/**
* 获取随机数
*
* @return
*/
public static String getRandomNumber() {
return new DecimalFormat("0000000000").format(new Random().nextInt(1000000000));
}
/**
* 截取并按规则组合字符串
*
* @return
*/
public static String subAndCombinationString(String str, int subLength,
boolean isReduction) {
if (isReduction) {
String str1 = str.substring(0, subLength);
String str2 = str.replace(str1, "");
String result = str2 + str1;
return result;
} else {
String temp = str.substring(0, str.length() - subLength);
String str1 = temp.substring(0, subLength);
String str2 = temp.replace(str1, "");
String str3 = str.replace(temp, "");
String result = str3 + str1 + str2;
return result;
}
}
/**
* 保存一张图片到sd卡
*
* @param bitmapPath
* @param bitmapName
* @param mBitmap
*/
public static void saveBitmapToSdcard(String bitmapPath, String bitmapName, Bitmap mBitmap) {
FileOutputStream fOut = null;
try {
File f = new File(bitmapPath, bitmapName);
File parent = f.getParentFile();
if (parent != null && !parent.exists()) {
parent.mkdirs();
}
if (!f.exists()){
f.createNewFile();
}
fOut = new FileOutputStream(f);
mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fOut != null) {
fOut.flush();
fOut.close();
fOut = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 保存一张图片到sd卡
*
* @param bitmapPath
* @param mBitmap
*/
public static void saveBitmapToSdcard(String bitmapPath, Bitmap mBitmap) {
FileOutputStream fOut = null;
try {
File f = new File(bitmapPath);
File parent = f.getParentFile();
if (parent != null && !parent.exists()) {
parent.mkdirs();
}
if (!f.exists()){
f.createNewFile();
}
fOut = new FileOutputStream(f);
mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
} catch (final Exception e) {
e.printStackTrace();
} finally {
try {
if (fOut != null) {
fOut.flush();
fOut.close();
fOut = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* string转boolean
*
* @param s
* @return
*/
public static boolean stringToBoolean(String s) {
if (s != null) {
if (s.equals("1")) {
return true;
} else if (s.equals("0")) {
return false;
} else {
return Boolean.parseBoolean(s);
}
}
return false;
}
/**
* 获取uuid
*
* @return
*/
public static String getUuid() {
return UUID.randomUUID().toString().replace("-", "");
}
/**
* 退出软件
*/
public static void exitApp(boolean is) {
// BaseApplication.BaseApp.getInstance().exit();
// Context BaseApp.getInstance() = BaseApplication.BaseApp.getInstance();
// NotificationManager notificationManager = (NotificationManager) BaseApp.getInstance()
// .getSystemService(Context.NOTIFICATION_SERVICE);
// notificationManager.cancelAll();
// if(is)
// {
// ActivityManager activityManager = (ActivityManager) BaseApp.getInstance().getSystemService(Context.ACTIVITY_SERVICE);
// activityManager.restartPackage(BaseApp.getInstance().getPackageName());
// }
// android.os.Process.killProcess(android.os.Process.myPid());
}
public static void restartApplication(Context context) {
final Intent intent = context.getPackageManager().getLaunchIntentForPackage(UIUtils.getPackageName());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
}
/**
* 保存数据到sd卡
*
* @param content
* @param fileName
* @param filePath
* @param isGzip true压缩保存
* @param isAppend true续写文件,false重新写文件
* @return 0:成功,1:sd卡错误,2:其他错误,3:存储卡已满
* @throws
*/
public synchronized static void writeDataToSdcard(byte[] content, String filePath, String fileName, boolean isGzip,
boolean isAppend) throws Exception {
FileOutputStream fos = null;
GZIPOutputStream gzin = null;
try {
// 判断当前的可用盘符,优先使用sdcard
File testDir = new File(filePath);
if (!testDir.exists()) {
testDir.mkdirs();
}
File file = new File(filePath + fileName);
if (isAppend) {
if (!file.exists()) {
file.createNewFile();
}
} else {
if (file.exists()) {
file.delete();
}
file.createNewFile();
}
if (file.exists() && file.canWrite()) {
fos = new FileOutputStream(file, isAppend);
if (isGzip) {
gzin = new GZIPOutputStream(fos);
gzin.write(content);
gzin.flush();
} else {
fos.write(content);
fos.flush();
}
}
} catch (Exception e) {
throw e;
} finally {
try {
if (gzin != null) {
gzin.close();
}
if (fos != null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 获取指定画笔的文字高度
*
* @param paint
* @return
*/
public static float getFontHeight(Paint paint) {
FontMetrics fm = paint.getFontMetrics();
return fm.descent - fm.ascent;
}
/**
* 获取全部图片的_id和路径
*
* @return
*/
public static LinkedHashMap<Long, String> getAllImages(Context context) {
LinkedHashMap<Long, String> images = new LinkedHashMap<Long, String>();
try {
// 得到数据库所有图片的Cursor
Intent intent = new Intent(Intent.ACTION_PICK,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
Uri uri = intent.getData();
String[] proj = {MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA};
Cursor cursor = context.getContentResolver().query(uri, proj, null, null,
MediaStore.Images.ImageColumns.DATE_ADDED + " DESC");
while (cursor.moveToNext()) {
// 获取图片的_id
long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media._ID));
// 获取图片的路径
String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
images.put(id, path);
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return images;
}
/**
* 的到图片的缩略图
*
* @param context
* @param imageId 数据库中的图片_id
* @return
*/
public static Bitmap getImageThumbnail(Context context, long imageId) {
Bitmap bitmap = null;
// 根据ID获取缩略图
bitmap = Thumbnails.getThumbnail(context.getContentResolver(), imageId, Thumbnails.MICRO_KIND, null);
return bitmap;
}
/**
* 获取全部文件夹下的图片的_id和路径
*
* @return
*/
public static LinkedHashMap<Long, String> getAllImages(Context context, String folderPath) {
LinkedHashMap<Long, String> images = new LinkedHashMap<Long, String>();
try {
// 得到数据库所有图片的Cursor
Intent intent = new Intent(Intent.ACTION_PICK,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
Uri uri = intent.getData();
String[] proj = {MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA};
Cursor cursor = context.getContentResolver().query(uri, proj, null, null,
MediaStore.Images.ImageColumns.DATE_ADDED + " DESC");
while (cursor.moveToNext()) {
// 获取图片的_id
long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media._ID));
// 获取图片的路径
String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
int lastIndexOf = path.lastIndexOf(File.separator);
String substring = path.substring(0, lastIndexOf);
if (folderPath.equals(substring)) {
images.put(id, path);
}
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return images;
}
/**
* 获取视频第一帧图片
*
* @param videoPath
* 视频地址
* @return
*/
public static Bitmap getVideoFirstFrame(String videoPath) {
Bitmap bitmap = null;
try {
if (!TextUtils.isEmpty(videoPath)) {
MediaMetadataRetriever media = new MediaMetadataRetriever();
media.setDataSource(videoPath);
bitmap = media.getFrameAtTime(0);
}
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}
/**
* 旋转图片
*
* @param angle
* @param bitmap
* @return Bitmap
*/
public static Bitmap rotaingImageView(int angle, Bitmap bitmap) {
// 旋转图片 动作
Matrix matrix = new Matrix();
;
matrix.postRotate(angle);
// 创建新的图片
Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
return resizedBitmap;
}
/**
* 读取图片属性:旋转的角度
*
* @param path 图片绝对路径
* @return degree旋转的角度
*/
public static int readPictureDegree(String path) {
int degree = 0;
try {
ExifInterface exifInterface = new ExifInterface(path);
int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
degree = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
degree = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
degree = 270;
break;
}
} catch (IOException e) {
e.printStackTrace();
}
return degree;
}
/**
* 是否匹配第一位是1共11位数字的正则表达式
*
* @param no
* @return
*/
public static boolean matchesPhoneNo(String no) {
String pattern = "^[1]\\d{10}$";
return Pattern.compile(pattern).matcher(no).matches();
}
/**
* 是否匹配数字和字母
*
* @param no
* @return
*/
public static boolean isPsd(String no) {
String pattern = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$";
return Pattern.compile(pattern).matcher(no).matches();
}
/**
* 获取yyyy-MM-dd的日期格式 并且加天天数
*
* @param s 传入2010-01-01格式的数据
* @param n 传入你想要加的天数
* @return
*/
public static String addDay(String s, int n) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cd = Calendar.getInstance();
cd.setTime(sdf.parse(s));
cd.add(Calendar.DATE, n);//增加一天
//cd.add(Calendar.MONTH, n);//增加一个月
return sdf.format(cd.getTime());
} catch (Exception e) {
return null;
}
}
/**
* 获取yyyy-MM-dd的日期格式 并且减天数
*
* @param s 2010-01-01格式的数据
* @param n 传入你想要减的天数
* @return
*/
public static String JianDay(String s, int n) {
try {
SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd");
Calendar date = Calendar.getInstance();
date.setTime(dft.parse(s));
date.set(Calendar.DATE, date.get(Calendar.DATE) - 1);//减一天
// date.set(Calendar.MONTH, date.get(Calendar.MONTH)-1);//减一月
Date endDate = dft.parse(dft.format(date.getTime()));
return dft.format(endDate);
} catch (Exception e) {
return null;
}
}
/**
* @param curTime
* @param start HH:mm 格式
* @param end HH:mm 格式
* @return
* @Description: 判断时间是否在指点时间段内
*/
public static boolean isTimeBetween(long curTime, String date, String start, String end) {
long startLong = Tools.getDateStringToLong(date + " " + start + ":00");
long endLong = Tools.getDateStringToLong(date + " " + end + ":00");
return curTime > startLong && curTime < endLong;
}
/**
* 得到本地或者网络上的bitmap url - 网络或者本地图片的绝对路径,比如:
* <p/>
* A.网络路径: url="http://blog.foreverlove.us/girl2.png" ;
* <p/>
* B.本地路径:url="file://mnt/sdcard/photo/image.png";
* <p/>
* C.支持的图片格式 ,png, jpg,bmp,gif等等
*
* @param path
* @return
*/
public static Bitmap convertToBitmap(String path) {
int w = 100;
int h = 100;
BitmapFactory.Options opts = new BitmapFactory.Options();
// 设置为ture只获取图片大小
opts.inJustDecodeBounds = true;
opts.inPreferredConfig = Config.ARGB_8888;
// 返回为空
BitmapFactory.decodeFile(path, opts);
int width = opts.outWidth;
int height = opts.outHeight;
float scaleWidth = 0.f, scaleHeight = 0.f;
if (width > w || height > h) {
// 缩放
scaleWidth = ((float) width) / w;
scaleHeight = ((float) height) / h;
}
opts.inJustDecodeBounds = false;
float scale = Math.max(scaleWidth, scaleHeight);
opts.inSampleSize = (int) scale;
WeakReference<Bitmap> weak = new WeakReference<Bitmap>(BitmapFactory.decodeFile(path, opts));
// return Bitmap.createScaledBitmap(weak.get(), w, h, true);
return Bitmap.createBitmap(weak.get());
}
public static boolean isAppOnForeground() {
// Returns a list of application processes that are running on the
// device
ActivityManager activityManager = (ActivityManager) BaseApp.getInstance().getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
String packageName = BaseApp.getInstance().getApplicationContext().getPackageName();
List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
if (appProcesses == null)
return false;
for (RunningAppProcessInfo appProcess : appProcesses) {
// The name of the process that this object is associated with.
if (appProcess.processName.equals(packageName)
&& appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
return true;
}
}
return false;
}
/**
* 得到本地或者网络上的bitmap url - 网络或者本地图片的绝对路径,比如:
* <p/>
* A.网络路径: url="http://blog.foreverlove.us/girl2.png" ;
* <p/>
* B.本地路径:url="file://mnt/sdcard/photo/image.png";
* <p/>
* C.支持的图片格式 ,png, jpg,bmp,gif等等
*
* @param path
* @return
*/
public static Bitmap convertToBitmap(String path,int w,int h) {
BitmapFactory.Options opts = new BitmapFactory.Options();
// 设置为ture只获取图片大小
opts.inJustDecodeBounds = true;
opts.inPreferredConfig = Config.ARGB_8888;
// 返回为空
BitmapFactory.decodeFile(path, opts);
int width = opts.outWidth;
int height = opts.outHeight;
float scaleWidth = 0.f, scaleHeight = 0.f;
if (width > w || height > h) {
// 缩放
scaleWidth = ((float) width) / w;
scaleHeight = ((float) height) / h;
}
opts.inJustDecodeBounds = false;
float scale = Math.max(scaleWidth, scaleHeight);
opts.inSampleSize = (int) scale;
WeakReference<Bitmap> weak = new WeakReference<Bitmap>(BitmapFactory.decodeFile(path, opts));
return Bitmap.createScaledBitmap(weak.get(), w, h, true);
}
/**
* 取得圆形图片
*
* @param bitmap
* @return
*/
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) {
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final Paint paint = new Paint();
//保证是方形,并且从中心画
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int w;
int deltaX = 0;
int deltaY = 0;
if (width <= height) {
w = width;
deltaY = height - w;
} else {
w = height;
deltaX = width - w;
}
final Rect rect = new Rect(deltaX, deltaY, w, w);
final RectF rectF = new RectF(rect);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
//圆形,所有只用一个
int radius = (int) (Math.sqrt(w * w * 2.0d) / 2);
canvas.drawRoundRect(rectF, radius, radius, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}
/**
* 检测是否有emoji表情
*
* @param source
* @return
*/
public static boolean containsEmoji(String source) {
int len = source.length();
for (int i = 0; i < len; i++) {
char codePoint = source.charAt(i);
if (!isEmojiCharacter(codePoint)) {
//如果不能匹配,则该字符是Emoji表情
return true;
}
}
return false;
}
/**
* 判断是否是Emoji
*
* @param codePoint 比较的单个字符
* @return
*/
private static boolean isEmojiCharacter(char codePoint) {
return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) ||
(codePoint == 0xD) || ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) ||
((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000)
&& (codePoint <= 0x10FFFF));
}
public static String getSelectTime(int y, int m, int d) {
StringBuffer sb = new StringBuffer();
sb.append(y);
sb.append("-");
if (m < 10)
sb.append(0);
sb.append(m);
sb.append("-");
if (d < 10)
sb.append(0);
sb.append(d);
return sb.toString();
}
/**
* 判断GPS是否开启,GPS或者AGPS开启一个就认为是开启的
*
* @param context
* @return true 表示开启
*/
public static final boolean isOPen(final Context context) {
LocationManager locationManager
= (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
// 通过GPS卫星定位,定位级别可以精确到街(通过24颗卫星定位,在室外和空旷的地方定位准确、速度快)
boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (gps) {
return true;
}
return false;
}
/**
* 强制帮用户打开GPS
*
* @param context
*/
public static final void openGPS(Context context) {
Intent GPSIntent = new Intent();
GPSIntent.setClassName("com.android.settings",
"com.android.settings.widget.SettingsAppWidgetProvider");
GPSIntent.addCategory("android.intent.category.ALTERNATIVE");
GPSIntent.setData(Uri.parse("custom:3"));
try {
PendingIntent.getBroadcast(context, 0, GPSIntent, 0).send();
} catch (CanceledException e) {
e.printStackTrace();
}
}
/**
* 将list<String>转成逗号隔开的字符串
*/
public static String getListString(List<String> list) {
StringBuffer buffer = new StringBuffer();
if (null != list && list.size() > 0) {
for (String str : list) {
buffer.append(str + ",");
}
return buffer.toString().substring(0, buffer.toString().length() - 1);
}
return "";
}
/**
* 将逗号隔开的字符串转成list<String></>
*/
public static List<String> getList(String str) {
if (!TextUtils.isEmpty(str)) {
String[] array = str.split(",");
return Arrays.asList(array);
}
return null;
}
public static Bitmap createColorBitmap(int color, int width, int height) {
Bitmap bmp = Bitmap.createBitmap(width, height, Config.ARGB_8888);
bmp.eraseColor(color);
return bmp;
}
/**
* 计算两个坐标之间的距离
*/
public static double getDistanceFromXtoY(double lat_a, double lng_a,
double lat_b, double lng_b) {
double pk = (double) (180 / 3.14169);
double a1 = lat_a / pk;
double a2 = lng_a / pk;
double b1 = lat_b / pk;
double b2 = lng_b / pk;
double t1 = Math.cos(a1) * Math.cos(a2) * Math.cos(b1) * Math.cos(b2);
double t2 = Math.cos(a1) * Math.sin(a2) * Math.cos(b1) * Math.sin(b2);
double t3 = Math.sin(a1) * Math.sin(b1);
double tt = Math.acos(t1 + t2 + t3);
return 6366000 * tt;
}
//将图片按照某个角度进行旋转
public static Bitmap rotateBitmapByDegree(Bitmap bm, int degree) {
Bitmap returnBm = null;
// 根据旋转角度,生成旋转矩阵
Matrix matrix = new Matrix();
matrix.postRotate(degree);
try {
// 将原始图片按照旋转矩阵进行旋转,并得到新的图片
returnBm = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true);
} catch (OutOfMemoryError e) {
}
if (returnBm == null) {
returnBm = bm;
}
if (bm != returnBm) {
bm.recycle();
}
return returnBm;
}
//bitmap转化为drawable
public static Bitmap setDrawable1(Bitmap backGroundMap) {
int widthDrawable = backGroundMap.getWidth();
int heightDrawable = backGroundMap.getHeight();//获取背景图片的宽和高
int center_X = widthDrawable/2;
int center_Y = heightDrawable/2;
int WH = 100;
if (widthDrawable > WH && heightDrawable > WH) {
WH = 100;
}else{
if (widthDrawable > heightDrawable) {
WH = heightDrawable;
}else{
WH = widthDrawable;
}
}
int start_x = center_X - WH / 2;
int start_y = center_Y - WH / 2;
return Bitmap.createBitmap(backGroundMap, start_x, start_y, WH,
WH, null, true);
}
/**
* @param uri
* The Uri to check.
* @return Whether the Uri authority is ExternalStorageProvider.
*/
public static boolean isExternalStorageDocument(Uri uri) {
return "com.android.externalstorage.documents".equals(uri.getAuthority());
}
/**
* @param uri
* The Uri to check.
* @return Whether the Uri authority is DownloadsProvider.
*/
public static boolean isDownloadsDocument(Uri uri) {
return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}
/**
* @param uri
* The Uri to check.
* @return Whether the Uri authority is MediaProvider.
*/
public static boolean isMediaDocument(Uri uri) {
return "com.android.providers.media.documents".equals(uri.getAuthority());
}
public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
Cursor cursor = null;
final String column = "_data";
final String[] projection = { column };
try {
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
if (cursor != null && cursor.moveToFirst()) {
final int column_index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(column_index);
}
} finally {
if (cursor != null)
cursor.close();
}
return null;
}
// 专为Android4.4设计的从Uri获取文件绝对路径,以前的方法已不好使
@TargetApi(Build.VERSION_CODES.KITKAT)
public static String getPathByUri4kitkat(final Context context, final Uri uri) {
final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
// DocumentProvider
if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
if (isExternalStorageDocument(uri)) {// ExternalStorageProvider
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/" + split[1];
}
} else if (isDownloadsDocument(uri)) {// DownloadsProvider
final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"),
Long.valueOf(id));
return getDataColumn(context, contentUri, null, null);
} else if (isMediaDocument(uri)) {// MediaProvider
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
Uri contentUri = null;
if ("image".equals(type)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
}
final String selection = "_id=?";
final String[] selectionArgs = new String[] { split[1] };
return getDataColumn(context, contentUri, selection, selectionArgs);
}
} else if ("content".equalsIgnoreCase(uri.getScheme())) {// MediaStore
// (and
// general)
return getDataColumn(context, uri, null, null);
} else if ("file".equalsIgnoreCase(uri.getScheme())) {// File
return uri.getPath();
}
return null;
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public static boolean isNotificationEnabled(Context context) {
String CHECK_OP_NO_THROW = "checkOpNoThrow";
String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION";
AppOpsManager mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
ApplicationInfo appInfo = context.getApplicationInfo();
String pkg = context.getApplicationContext().getPackageName();
int uid = appInfo.uid;
Class appOpsClass = null;
/* Context.APP_OPS_MANAGER */
try {
appOpsClass = Class.forName(AppOpsManager.class.getName());
Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE,
String.class);
Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION);
int value = (Integer) opPostNotificationValue.get(Integer.class);
Integer invoke = (Integer) checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg);
return ( invoke== AppOpsManager.MODE_ALLOWED) || invoke == AppOpsManager.MODE_DEFAULT;
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return false;
}
public static String getDateThisTimeZone(String scenicTime,String scenicTimeZone) {
//Asia/Tokyo,Asia/Shanghai
if (TextUtils.isEmpty(scenicTime)) {
return "";
}
scenicTime = "2017-03-03T"+scenicTime;
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
formatter.setTimeZone(TimeZone.getTimeZone(scenicTimeZone));
Date value = null;
try {
value = formatter.parse(scenicTime);
} catch (ParseException e) {
e.printStackTrace();
}
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
dateFormatter.setTimeZone(TimeZone.getDefault());
String dt = dateFormatter.format(value);
String[] ts = dt.split("T");
return ts[1];
}
/**
* 判断是否已过24小时或者已过0点,用来抽奖活动每日0点刷新弹出次数
* 单位为毫秒
* @param currentTime 现在时间
* @param pastTime 上次的时间
*/
public static boolean judgeTime(long currentTime,long pastTime){
long current = currentTime / (1000 * 3600 * 24);
long past = pastTime / (1000 * 3600 * 24);
if (current - past >=1){
return true;
}else {
return false;
}
}
/**
* 加密
* @param plaintext 明文
* @return ciphertext 密文
*/
public static String encrypt(String plaintext) {
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f' };
try {
byte[] btInput = plaintext.getBytes();
// 获得MD5摘要算法的 MessageDigest 对象
MessageDigest mdInst = MessageDigest.getInstance("MD5");
// 使用指定的字节更新摘要
mdInst.update(btInput);
// 获得密文
byte[] md = mdInst.digest();
// 把密文转换成十六进制的字符串形式
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
} catch (Exception e) {
return null;
}
}
/**
* Return pseudo unique ID,Serial序列号-->UUID
* @return ID
*/
public static String getDeviceId(){
// If all else fails, if the user does have lower than API 9 (lower
// than Gingerbread), has reset their phone or 'Secure.ANDROID_ID'
// returns 'null', then simply the ID returned will be solely based
// off their Android device information. This is where the collisions
// can happen.
// Thanks http://www.pocketmagic.net/?p=1662!
// Try not to use DISPLAY, HOST or ID - these items could change.
// If there are collisions, there will be overlapping data
String m_szDevIDShort = "35" + (Build.BOARD.length() % 10) + (Build.BRAND.length() % 10) + (Build.CPU_ABI.length() % 10) + (Build.DEVICE.length() % 10) + (Build.MANUFACTURER.length() % 10) + (Build.MODEL.length() % 10) + (Build.PRODUCT.length() % 10);
String serial = null;
try {
serial = Build.class.getField("SERIAL").get(null).toString();
// Go ahead and return the serial for api => 9
return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
} catch (Exception e) {
// String needs to be initialized
serial = "serial"; // some value
}
return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
}
/**
* 将资源图片转换为bitmap
*/
public static Bitmap convertRes2Bitmap(Context context ,int resId){
return BitmapFactory.decodeResource(context.getResources(), resId);
}
public static String getIP(Context context){
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();)
{
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress() && (inetAddress instanceof Inet4Address))
{
return inetAddress.getHostAddress().toString();
}
}
}
}
catch (SocketException ex){
ex.printStackTrace();
}
return null;
}
/**
* 外网ip
* @return
*/
public static String GetNetIp() {
URL infoUrl = null;
InputStream inStream = null;
String line = "";
try {
infoUrl = new URL("http://pv.sohu.com/cityjson?ie=utf-8");
URLConnection connection = infoUrl.openConnection();
HttpURLConnection httpConnection = (HttpURLConnection) connection;
int responseCode = httpConnection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
inStream = httpConnection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inStream, "utf-8"));
StringBuilder strber = new StringBuilder();
while ((line = reader.readLine()) != null)
strber.append(line + "\n");
inStream.close();
// 从反馈的结果中提取出IP地址
int start = strber.indexOf("{");
int end = strber.indexOf("}");
String json = strber.substring(start, end + 1);
if (json != null) {
try {
JSONObject jsonObject = new JSONObject(json);
line = jsonObject.optString("cip");
} catch (JSONException e) {
e.printStackTrace();
}
}
return line;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return line;
}
}