美文网首页
Tools(工具类)(二)

Tools(工具类)(二)

作者: 沈溺_16e5 | 来源:发表于2019-05-11 19:09 被阅读0次
     /**
         * 调节屏幕亮度
         *
         * @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;
        }
    }
    

    相关文章

      网友评论

          本文标题:Tools(工具类)(二)

          本文链接:https://www.haomeiwen.com/subject/czlfaqtx.html