Android开发人员不得不收集的代码(不断更新)

为方便查找,已进行大致归类,其目录如下所示:


  • 尺寸相关SizeUtils.java

    • dp与px转换 dp2pxpx2dp

    • sp与px转换 sp2pxpx2sp

    • 各种单位转换 applyDimension

    • 在onCreate()即可强行获取View的尺寸 forceGetViewSize

    • ListView中提前测量View尺寸(注释萌萌哒) measureView

  • 设备相关DeviceUtils.java

    • 获取设备MAC地址 getMacAddress

    • 获取设备厂商,如Xiaomi getManufacturer

    • 获取设备型号,如MI2SC getModel

    • 获取设备SD卡是否可用 isSDCardEnable

    • 获取设备SD卡路径 getSDCardPath

  • 手机相关PhoneUtils.java

    • 判断设备是否是手机 isPhone

    • 获取手机的IMIE getDeviceIMEI

    • 获取手机状态信息 getPhoneStatus

    • 拨打电话 callDial

    • 发送短信 sendSms

    • 获取手机联系人 getAllContactInfo

    • 打开手机联系人界面点击联系人后便获取该号码(注释萌萌哒) getContantNum

    • 获取手机短信并保存到xml中 getAllSMS

  • 网络相关NetworkUtils.java

    • 打开网络设置界面 openWirelessSettings

    • 判断是否网络连接 isConnected

    • 判断wifi是否连接状态 isWifiConnected

    • 获取移动网络运营商名称 getNetworkOperatorName

    • 获取移动终端类型 getPhoneType

    • 获取连接的网络类型(2G,3G,4G) getCurNetworkType

    • 获取当前手机的网络类型(WIFI,2G,3G,4G) getNetWorkStatus

  • App相关AppUtils.java

    • 安装指定路径下的Apk installApk

    • 卸载指定包名的App uninstallApp

    • 获取当前App信息 getAppInfo

    • 获取所有已安装App信息 getAllAppsInfo

    • 打开指定包名的App openAppByPackageName

    • 打开指定包名的App应用信息界面 openAppInfo

    • 可用来做App信息分享 shareAppInfo

    • 判断当前App处于前台还是后台 isApplicationBackground

  • 屏幕相关ScreenUtils.java

    • 获取手机分辨率 getDeviceWidthgetDeviceHeight

    • 设置透明状态栏(api >= 19方可使用) setTransparentStatusBar

    • 隐藏状态栏(注释萌萌哒) hideStatusBar

    • 获取状态栏高度 getStatusBarHeight

    • 获取状态栏高度+标题栏(ActionBar)高度 getTopBarHeight

    • 设置屏幕为横屏(注释萌萌哒) setLandscape

    • 获取屏幕截图 snapShotWithStatusBarsnapShotWithoutStatusBar

  • 键盘相关KeyboardUtils.java

    • 避免输入法面板遮挡

    • 动态隐藏软键盘 hideSoftInput

    • 点击屏幕空白区域隐藏软键盘(注释萌萌哒) clickBlankArea2HideSoftInput0

    • 动态显示软键盘 showSoftInput

    • 切换键盘显示与否状态 toggleSoftInput

  • 正则相关RegularUtils.java

    • 正则工具类

  • 加解密相关EncryptUtils.java

    • MD5加密 encryptMD5

    • SHA加密 encryptSHA

  • 未归类UnclassifiedUtils.java

    • 获取服务是否开启 isRunningService

  • 更新Log


做这份整理只是想把它作为Android的一本小字典,当遇到一些琐碎问题时,不用再面向百度或者谷歌查询API的使用,费时费力,这里有的话,大家尽管撸走。希望它能逐日壮大起来,期待你的Star和完善,用途的话大家想把它们整理成工具类或者什么的话都可以,之后我也会封装工具类并分享之,但本篇只是提供查阅,毕竟看md比看类文件要爽多了,其中好多代码我也是各种搜刮来的,也要谢谢各位的总结,大部分代码已验证过可行,如有错误,请及时告之,开设微信群(微信群满,请加运营微信AMPRE拉你入群)和QQ群(群号:558902989  )提供讨论。


分类已上传至Github,传送门→期待你的Star和完善  


好了,废话不多说,开始开车,嘟嘟......

尺寸相关

dp与px转换


sp与px转换


各种单位转换


在onCreate()即可强行获取View的尺寸



ListView中提前测量View尺寸



设备相关

获取设备MAC地址


获取设备厂商,如Xiaomi


获取设备型号,如MI2SC


获取设备SD卡是否可用


获取设备SD卡路径


手机相关

判断设备是否是手机


获取手机的IMIE


获取手机状态信息



拨打电话


发送短信


获取手机联系人



打开手机联系人界面点击联系人后便获取该号码


获取手机短信并保存到xml中

/**
 * 获取手机短信并保存到xml中
 * 需添加权限
* <uses-permission android:name="android.permission.READ_SMS"/> * 需添加权限
* <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> */
public static void getAllSMS(Context context) {    //1.获取短信    //1.1获取内容解析者    ContentResolver resolver = context.getContentResolver();    
        //1.2获取内容提供者地址   sms,sms表的地址:null  不写    //1.3获取查询路径    Uri uri = Uri.parse("content://sms");    //1.4.查询操作    //projection : 查询的字段    //selection : 查询的条件    //selectionArgs : 查询条件的参数    //sortOrder : 排序    Cursor cursor = resolver.query(
        uri,new String[]{"address", "date", "type", "body"},null,null,null);  
   int count = cursor.getCount();//获取短信的个数    //2.备份短信    //2.1获取xml序列器    XmlSerializer xmlSerializer = Xml.newSerializer();    
   try {        
       //2.2设置xml文件保存的路径        //os : 保存的位置        //encoding : 编码格式        xmlSerializer.setOutput(new FileOutputStream(
               new File("/mnt/sdcard/backupsms.xml")), "utf-8");      
               //2.3设置头信息        //standalone : 是否独立保存        xmlSerializer.startDocument("utf-8", true);        //2.4设置根标签        xmlSerializer.startTag(null, "smss");        //1.5.解析cursor        while (cursor.moveToNext()) {            SystemClock.sleep(1000);            //2.5设置短信的标签            xmlSerializer.startTag(null, "sms");    //2.6设置文本内容的标签            xmlSerializer.startTag(null, "address");            String address = cursor.getString(0);            //2.7设置文本内容            xmlSerializer.text(address);            xmlSerializer.endTag(null, "address");            xmlSerializer.startTag(null, "date");            String date = cursor.getString(1);            xmlSerializer.text(date);            xmlSerializer.endTag(null, "date");            xmlSerializer.startTag(null, "type");            String type = cursor.getString(2);            xmlSerializer.text(type);            xmlSerializer.endTag(null, "type");            xmlSerializer.startTag(null, "body");            String body = cursor.getString(3);            xmlSerializer.text(body);            xmlSerializer.endTag(null, "body");            xmlSerializer.endTag(null, "sms");            System.out.println("address:" + address + "   date:"
               + date + "  type:" + type + "  body:" + body);        }        xmlSerializer.endTag(null, "smss");        xmlSerializer.endDocument();        //2.8将数据刷新到文件中        xmlSerializer.flush();    } catch (Exception e) {        // TODO Auto-generated catch block        e.printStackTrace();    } }

网络相关

打开网络设置界面


判断是否网络连接


判断wifi是否连接状态


获取移动网络运营商名称


获取移动终端类型


获取连接的网络类型(2G,3G,4G)



获取当前手机的网络类型(WIFI,2G,3G,4G)





App相关

安装指定路径下的Apk

/**
 * 安装指定路径下的Apk
 * 根据路径名是否符合和文件是否存在判断是否安装成功
 * 更好的做法应该是startActivityForResult回调判断是否安装成功比较妥当
 * 这里做不了回调,后续自己做处理
 */
public static boolean installApp(Context context, String filePath) {    
   if (filePath != null && filePath.length() > 4            && filePath.toLowerCase().substring(
               filePath.length() - 4).equals(".apk")) {        Intent intent = new Intent(Intent.ACTION_VIEW);        File file = new File(filePath);        
       if (file.exists() && file.isFile() && file.length() > 0) {            intent.setDataAndType(Uri.fromFile(file),
                   "application/vnd.android.package-archive");            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);            context.startActivity(intent);            
           return true;        }    }    
   return false; }

卸载指定包名的App


获取当前App信息





获取所有已安装App信息


打开指定包名的App


打开指定包名的App应用信息界面


可用来做App信息分享


判断当前App处于前台还是后台



屏幕相关

获取手机分辨率

/**
* 获取屏幕的宽度px
*/
public static int getDeviceWidth(Context context) {    WindowManager windowManager = (WindowManager)
                       context.getSystemService(Context.WINDOW_SERVICE);    DisplayMetrics outMetrics = new DisplayMetrics();// 创建了一张白纸    windowManager.getDefaultDisplay().getMetrics(outMetrics);// 给白纸设置宽高    return outMetrics.widthPixels; }
                       
/** * 获取屏幕的高度px */
public static int getDeviceHeight(Context context) {    WindowManager windowManager = (WindowManager)
                   context.getSystemService(Context.WINDOW_SERVICE);    DisplayMetrics outMetrics = new DisplayMetrics();// 创建了一张白纸    windowManager.getDefaultDisplay().getMetrics(outMetrics);// 给白纸设置宽高    return outMetrics.heightPixels; }

获取状态栏高度

/**
* 获取状态栏高度
*/
public int getStatusBarHeight() {    
   int result = 0;    
   int resourceId = getResources().getIdentifier(
        "status_bar_height", "dimen", "android");    if (resourceId > 0) {        
        result = getResources().getDimensionPixelSize(resourceId);    }    

   return result; }

获取ActionBar高度

/**
 * 获取ActionBar高度
 */
public static int getActionBarHeight(Activity activity) {    TypedValue tv = new TypedValue();    
   if (activity.getTheme().resolveAttribute(
           android.R.attr.actionBarSize, tv, true)) {        
           return TypedValue.complexToDimensionPixelSize(
                   tv.data, activity.getResources().getDisplayMetrics());    }    
   return 0; }

获取屏幕截图

/**
 * 获取当前屏幕截图,包含状态栏
 */
public static Bitmap captureWithStatusBar(Activity activity) {    View view = activity.getWindow().getDecorView();    view.setDrawingCacheEnabled(true);    view.buildDrawingCache();    Bitmap bmp = view.getDrawingCache();    
   int width = getScreenWidth(activity);    
   int height = getScreenHeight(activity);    Bitmap bp = Bitmap.createBitmap(bmp, 0, 0, width, height);    view.destroyDrawingCache();    
   return bp; }

/** * 获取当前屏幕截图,不包含状态栏 * 需要用到上面获取状态栏高度的方法 */
public static Bitmap captureWithoutStatusBar(Activity activity) {    View view = activity.getWindow().getDecorView();    view.setDrawingCacheEnabled(true);    view.buildDrawingCache();    Bitmap bmp = view.getDrawingCache();    
   int statusBarHeight = getStatusBarHeight(activity);    
   int width = getScreenWidth(activity);    
   int height = getScreenHeight(activity);    Bitmap bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width,
                                                height - statusBarHeight);    view.destroyDrawingCache();    
   return bp; }

设置透明状态栏(api >= 19方可使用)

/**
* 设置透明状态栏(api >= 19方可使用)
* 可在Activity的onCreat()中调用
* 需在顶部控件布局中加入以下属性让内容出现在状态栏之下
* android:clipToPadding="true"
* android:fitsSystemWindows="true"
*/

public static void setTransparentStatusBar(Activity activity) {    
   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //透明状态栏        activity.getWindow().addFlags(WindowManager.LayoutParams.
                       FLAG_TRANSLUCENT_STATUS);        //透明导航栏        activity.getWindow().addFlags(WindowManager.LayoutParams.
                       FLAG_TRANSLUCENT_NAVIGATION);    } }



键盘相关

避免输入法面板遮挡

// 在manifest.xml中activity中设置
android:windowSoftInputMode="stateVisible|adjustResize"

动态隐藏软键盘


点击屏幕空白区域隐藏软键盘

/**
 * 点击屏幕空白区域隐藏软键盘(方法1)
 * 在onTouch中处理,未获焦点则隐藏
 * 参照以下注释代码
 */
public static void clickBlankArea2HideSoftInput0() {    Log.i("tips", "U should copy the following code.");        @Override    public boolean onTouchEvent (MotionEvent event){        if (null != this.getCurrentFocus()) {            InputMethodManager mInputMethodManager = (InputMethodManager)
                                   getSystemService(INPUT_METHOD_SERVICE);            return mInputMethodManager.hideSoftInputFromWindow(
                             this.getCurrentFocus().getWindowToken(), 0);        }        return super.onTouchEvent(event);    }  }

/** * 点击屏幕空白区域隐藏软键盘(方法2) * 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘 * 需重写dispatchTouchEvent * 参照以下注释代码 */
public static void clickBlankArea2HideSoftInput1() {    Log.i("tips", "U should copy the following code.");      @Override    public boolean dispatchTouchEvent(MotionEvent ev) {        if (ev.getAction() == MotionEvent.ACTION_DOWN) {            View v = getCurrentFocus();            if (isShouldHideKeyboard(v, ev)) {                hideKeyboard(v.getWindowToken());            }        }        return super.dispatchTouchEvent(ev);    }    // 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘    private boolean isShouldHideKeyboard(View v, MotionEvent event) {        if (v != null && (v instanceof EditText)) {            int[] l = {0, 0};            v.getLocationInWindow(l);            int left = l[0],                    top = l[1],                    bottom = top + v.getHeight(),                    right = left + v.getWidth();            return !(event.getX() > left && event.getX() < right                    && event.getY() > top && event.getY() < bottom);        }        return false;    }    // 获取InputMethodManager,隐藏软键盘    private void hideKeyboard(IBinder token) {        if (token != null) {          InputMethodManager im = (InputMethodManager)
                   getSystemService(Context.INPUT_METHOD_SERVICE);          im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);        }    } }

动态显示软键盘


切换键盘显示与否状态




正则相关

正则工具类

public class RegularUtils {    
   //验证手机号    private static final String REGEX_MOBILE =
       "^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$";    
   
   //验证座机号,正确格式:xxx/xxxx-xxxxxxx/xxxxxxxx    private static final String REGEX_TEL = "^0\\d{2,3}[- ]?\\d{7,8}";    
   
   //验证邮箱    private static final String REGEX_EMAIL =
        "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";    
       
   //验证url    private static final String REGEX_URL =
           "http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?";    
           
   //验证汉字    private static final String REGEX_CHZ = "^[\\u4e00-\\u9fa5]+$";    
   
   //验证用户名,取值范围为a-z,A-Z,0-9,"_",汉字,不能以"_"结尾,用户名必须是6-20位    private static final String REGEX_USERNAME =
           "^[\\w\\u4e00-\\u9fa5]{6,20}(?<!_)$";    
           
   //验证IP地址 private static final String REGEX_IP =
  "((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)";    
       
  //If u want more please visit http://toutiao.com/i6231678548520731137/    /**     * @param string 待验证文本     * @return 是否符合手机号格式     */ public static boolean isMobile(String string) {        
  return isMatch(REGEX_MOBILE, string); }    
 
  /**     * @param string 待验证文本     * @return 是否符合座机号码格式     */
public static boolean isTel(String string) {        
      return isMatch(REGEX_TEL, string); }  

/**  * @param string 待验证文本  * @return 是否符合邮箱格式 */ public static boolean isEmail(String string) {        
   return isMatch(REGEX_EMAIL, string); }    

/**  * @param string 待验证文本  * @return 是否符合网址格式 */ public static boolean isURL(String string) {      
    return isMatch(REGEX_URL, string); }    

/** * @param string 待验证文本 * @return 是否符合汉字 */ public static boolean isChz(String string) {        
   return isMatch(REGEX_CHZ, string); }    
   
/**  * @param string 待验证文本  * @return 是否符合用户名 */ public static boolean isUsername(String string) {        
   return isMatch(REGEX_USERNAME, string); }    
   
/**  * @param regex  正则表达式字符串  * @param string 要匹配的字符串  * @return 如果str 符合 regex的正则表达式格式,返回true, 否则返回 false; */ public static boolean isMatch(String regex, String string) {        
   return !TextUtils.isEmpty(string) && Pattern.matches(regex, string); }
   }


加解密相关

MD5加密


SHA加密




未归类

获取服务是否开启



关于Java和Android大牛频道

Java和Android大牛频道是一个数万人关注的探讨Java和Android开发的公众号,分享和原创最有价值的干货文章,让你成为这方面的大牛

我们探讨android和Java开发最前沿的技术:android性能优化 ,插件化,动态化,跨平台,动态化,加固和反破解等,也讨论设计模式/软件架构等。由群来自BAT的工程师组成的团队

关注即送红包,回复:“百度” 、“阿里”、“腾讯” 有惊喜!!!关注后可用入微信群。群里都是来自百度阿里腾讯的大牛。

欢迎关注我们,一起讨论技术,扫描和长按下方的二维码可快速关注我们。搜索微信公众号:JANiubility。

公众号:JANiubility

如想加群讨论学习,请关注微信公众号点击右下角的“加群学习”菜单入群。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值