【收藏篇】Android 开发中常用的10种工具类

导语

 Android开发中,收集一些常用的代码工具类是非常重要的。现在Android开发技术已经很成熟了,很多代码大牛已经写出了很多框架和工具类,我们现在应该要站在巨人的肩膀上做开发了。今天我把平时开发中收集最常用的 10 个工具类,分享给大家。以后开发中合理利用,对于在平时开发中的效率是非常有帮助的 。

1安装应用APK

// 安装应用APK
 private void installApk(String apkFilePath) {
        File apkfile = new File(apkFilePath);        
        if (!apkfile.exists()) {            
            return;
        }
        Intent i = new Intent(Intent.ACTION_VIEW);
        i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive");
        startActivity(i);
    }
}

2MD5算法

public final static String MD5(String s) {        
            char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};        
            try {            
            byte[] btInput = s.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) {
            e.printStackTrace();            
                 return null;
        }
    }

3判断现在是否有网络

private boolean NetWorkStatus() {
        ConnectivityManager cwjManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

        cwjManager.getActiveNetworkInfo();        
        boolean netSataus = true;        
        if (cwjManager.getActiveNetworkInfo() != null) {

        netSataus = cwjManager.getActiveNetworkInfo().isAvailable();

        Toast.makeText(this, "网络已经打开", Toast.LENGTH_LONG).show();

        }
    else {
        Builder b = new AlertDialog.Builder(this).setTitle("没有可用的网络")
                                        .setMessage("是否对网络进行设置?");
        b.setPositiveButton("是", new DialogInterface.OnClickListener() 
        {    
                public void onClick(DialogInterface dialog, int whichButton) {
                Intent mIntent = new Intent("/");
                ComponentName comp = new ComponentName( "com.android.settings", "com.android.settings.WirelessSettings");
                mIntent.setComponent(comp);
                mIntent.setAction("android.intent.action.VIEW");
                startActivityForResult(mIntent,0); 
                }
                }).setNeutralButton("否", new DialogInterface.OnClickListener() {                        
                public void onClick(DialogInterface dialog, int whichButton) {
                        dialog.cancel();
                        }
                }).show();
                }                
                return netSataus;
        }

4获取设备屏幕的宽度高度密度

public  class   DisplayUtil { 
     /**
     * 得到设备屏幕的宽度
     */
    public static int getScreenWidth(Context context) {        
        return context.getResources().getDisplayMetrics().widthPixels;
    }    /**
     * 得到设备屏幕的高度
     */
    public static int getScreenHeight(Context context) {        
        return context.getResources().getDisplayMetrics().heightPixels;
    }    /**
     * 得到设备的密度
     */
    public static float getScreenDensity(Context context) {        
        return context.getResources().getDisplayMetrics().density;
    }
    }

5dp、sp 转换为 px 的工具类

public  class   DisplayUtil {          
    /**
     * 将px值转换为dip或dp值,保证尺寸大小不变
     */
    public static int px2dip(Context context, float pxValue) {        final float scale = context.getResources().getDisplayMetrics().density;        return (int) (pxValue / scale + 0.5f);
    }    /**
     * 将dip或dp值转换为px值,保证尺寸大小不变
     * 
     * @param dipValue
     * @param scale
     *            (DisplayMetrics类中属性density)
     * @return
     */
    public static int dip2px(Context context, float dipValue) {        
        final float scale = context.getResources().getDisplayMetrics().density;        
        return (int) (dipValue * scale + 0.5f);
    }    /**
     * 将px值转换为sp值,保证文字大小不变
     * 
     * @param pxValue
     * @param fontScale
     *            (DisplayMetrics类中属性scaledDensity)
     * @return
     */
    public static int px2sp(Context context, float pxValue) {        
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;        
        return (int) (pxValue / fontScale + 0.5f);
    }    /**
     * 将sp值转换为px值,保证文字大小不变
     * 
     * @param spValue
     * @param fontScale
     *            (DisplayMetrics类中属性scaledDensity)
     * @return
     */
    public static int sp2px(Context context, float spValue) {        
        final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;        
        return (int) (spValue * fontScale + 0.5f);
    }
    }

6drawable转bitmap的工具类

/**
 * drawable转bitmap
 *
 * @param drawable
 * @return
 */private Bitmap drawableToBitamp(Drawable drawable) {    
        if (null == drawable) {        
        return null;
        }if (drawable instanceof BitmapDrawable) {
        BitmapDrawable bd = (BitmapDrawable) drawable;        
        return bd.getBitmap();
    }    
        int w = drawable.getIntrinsicWidth();    
        int h = drawable.getIntrinsicHeight();
        Bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, w, h);
        drawable.draw(canvas);    
        return bitmap;
}

7文章发布模仿朋友圈时间显示


    public static String ChangeTime(Date time) {
        String ftime = "";
        Calendar cal = Calendar.getInstance();        // 判断是否是同一天
        String curDate = dateFormater2.get().format(cal.getTime());
        String paramDate = dateFormater2.get().format(time);        

    if (curDate.equals(paramDate)) {            

    int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);            

    if (hour == 0)
                ftime = Math.max(
                        (cal.getTimeInMillis() - time.getTime()) / 60000, 1)
                        + "分钟前";            

            else
                ftime = hour + "小时前";            

            return ftime;
        }        long lt = time.getTime() / 86400000;        

            long ct = cal.getTimeInMillis() / 86400000;        

            int days = (int) (ct - lt);        

            if (days == 0) {            

            int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);            

            if (hour == 0)
            ftime = Math.max( (cal.getTimeInMillis() - time.getTime()) / 60000, 1)
                        + "分钟前";           
             else
                ftime = hour + "小时前";
        } else if (days == 1) {
            ftime = "昨天";
        } else if (days == 2) {
            ftime = "前天 ";
        } else if (days > 2 && days < 31) {
            ftime = days + "天前";
        } else if (days >= 31 && days <= 2 * 31) {
            ftime = "一个月前";
        } else if (days > 2 * 31 && days <= 3 * 31) {
            ftime = "2个月前";
        } else if (days > 3 * 31 && days <= 4 * 31) {
            ftime = "3个月前";
        } else {
            ftime = dateFormater2.get().format(time);
        }        return ftime;
    }    public static String friendly_time(String sdate) {
        Date time = null;        

            if (TimeZoneUtil.isInEasternEightZones())
            time = toDate(sdate);        else
            time = TimeZoneUtil.transformTime(toDate(sdate),
                    TimeZone.getTimeZone("GMT+08"), TimeZone.getDefault());        

            if (time == null) {            

            return "Unknown";
        }
        String ftime = "";
        Calendar cal = Calendar.getInstance();        // 判断是否是同一天
        String curDate = dateFormater2.get().format(cal.getTime());
        String paramDate = dateFormater2.get().format(time);        

            if (curDate.equals(paramDate)) {            

            int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);            

            if (hour == 0)
                ftime = Math.max(
                        (cal.getTimeInMillis() - time.getTime()) / 60000, 1)
                        + "分钟前";           
             else
                ftime = hour + "小时前";            

             return ftime;
        }        long lt = time.getTime() / 86400000;        

             long ct = cal.getTimeInMillis() / 86400000;        

             int days = (int) (ct - lt);        

             if (days == 0) {            

             int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000);            

             if (hour == 0)
                ftime = Math.max(
                        (cal.getTimeInMillis() - time.getTime()) / 60000, 1)
                        + "分钟前";           

              else
                ftime = hour + "小时前";
        } else if (days == 1) {
            ftime = "昨天";
        } else if (days == 2) {
            ftime = "前天 ";
        } else if (days > 2 && days < 31) {
            ftime = days + "天前";
        } else if (days >= 31 && days <= 2 * 31) {
            ftime = "一个月前";
        } else if (days > 2 * 31 && days <= 3 * 31) {
            ftime = "2个月前";
        } else if (days > 3 * 31 && days <= 4 * 31) {
            ftime = "3个月前";
        } else {
            ftime = dateFormater2.get().format(time);
        }        return ftime;
    }

8时间格式转换工具类

public static String ConverToString(Date date) {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");        
        return df.format(date);
    }    
        public static String ConverToString2(Date date){
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");        
        return df.format(date);
    }    
        public static String ConverToString3(Date date){
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        
        return df.format(date);
    }

9验证码倒计时工具类

public class TimeCount extends CountDownTimer {    
    private Button button;    /**
     * 到计时
     * @param millisInFuture  到计时多久,毫秒
     * @param countDownInterval 周期
     * @param button   按钮
     */
    public TimeCount(long millisInFuture, long countDownInterval,Button button) {        
    super(millisInFuture, countDownInterval);        
    this.button =button;
    }    
    public TimeCount(long millisInFuture, long countDownInterval) {        
    super(millisInFuture, countDownInterval);
    }    
    @Override
    public void onFinish() {// 计时完毕
        button.setText("获取验证码");
        button.setClickable(true);
        button.setBackground(MyApplication.getContext().getResources().getDrawable(R.drawable.radius14));
    }   
     @Override
    public void onTick(long millisUntilFinished) {// 计时过程
        button.setClickable(false);//防止重复点击
        button.setText(millisUntilFinished / 1000 + "s后重试");
        button.setBackground(MyApplication.getContext().getResources().getDrawable(R.drawable.radius_gray));
    }
}

10屏幕截图工具类

public class ScreenShot {    
public static void shoot(Activity a, File filePath) {        
    if (filePath == null) {            
        return;
        }        
    if (!filePath.getParentFile().exists()) {
            filePath.getParentFile().mkdirs();
        }
        FileOutputStream fos = null;        
    try {
            fos = new FileOutputStream(filePath);            
    if (null != fos) {
                takeScreenShot(a).compress(Bitmap.CompressFormat.PNG, 100, fos);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {            
    if (fos != null) {                
    try {
                    fos.flush();
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }    private static Bitmap takeScreenShot(Activity activity) {
        View view = activity.getWindow().getDecorView();
        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        Bitmap bitmap = view.getDrawingCache();
        Rect frame = new Rect();
        activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);        
        int statusBarHeight = frame.top;        
        int width = activity.getWindowManager().getDefaultDisplay().getWidth();        
        int height = activity.getWindowManager().getDefaultDisplay()
                .getHeight();        //去掉标题栏
        Bitmap b = Bitmap.createBitmap(bitmap, 0, statusBarHeight, width,
                height - statusBarHeight);
        view.destroyDrawingCache();        return b;
    }

}

  总结

如果大家没空一个一个复制黏贴的话,我已经花费时间精力为大家整理成一个文档,大家可以关注公众号【程序IT圈】,后台回复:工具库。获得完整代码。

本文属于原创,如有转载,请标注原作者,版权归本公众号所有。如果你喜欢我写的文章请关注 程序IT圈  ,欢迎大家继续关注本公众号的技术博文。如果您觉得这篇文章对你有所帮助的话,不妨点个赞或给个赞赏哈,您的支持就是我坚持原创的动力~~

最后,如果你想写公众号和热爱编程的朋友们,我建立了个技术微信群,可以公众号回复 "加群" ,欢迎您进群学习哈~

iOS赞赏专属通道

推荐阅读

 

【收藏篇】9月技术优秀技术博文整合,值得收藏

【干货篇】福利篇:学习编程视频免费领取

目前有4000+人已关注加入我们,欢迎您关注

       

       

程序IT圈

长按下面识别二维码关注

编程技术|科技资讯|IT资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程IT圈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值