/*
* framework工具
*/publicclassUtils{/** tag */privatestaticfinalStringTAG="Utils";/**
* 安装某个应用
*
* @param context
* @param apkFile
* @return
*/publicstaticbooleaninstallApp(Contextcontext,FileapkFile){try{context.startActivity(getInstallAppIntent(apkFile));returntrue;}catch(Exceptione){Log.w(TAG,e);}returnfalse;}/**
* 获取安装应用的Intent
*
* @param apkFile
* @return
*/publicstaticIntentgetInstallAppIntent(FileapkFile){if(apkFile==null||!apkFile.exists()){returnnull;}Utils.chmod("777",apkFile.getAbsolutePath());Uriuri=Uri.fromFile(apkFile);Intentintent=newIntent(Intent.ACTION_VIEW);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setDataAndType(uri,"application/vnd.android.package-archive");returnintent;}/**
* �?查某个包名的App是否已经安装
*
* @param context
* @param packageName
* @return
*/publicstaticbooleanhasAppInstalled(Contextcontext,StringpackageName){try{PackageManagerpackageManager=context.getPackageManager();packageManager.getPackageInfo(packageName,PackageManager.GET_ACTIVITIES);}catch(Exceptione){returnfalse;}returntrue;}/**
* 根据包名启动第三方App
*
* @param context
* @param packageName
* @return
*/publicstaticbooleanlaunchAppByPackageName(Contextcontext,StringpackageName){if(TextUtils.isEmpty(packageName)){returnfalse;}try{Intentintent=context.getPackageManager().getLaunchIntentForPackage(packageName);if(intent!=null){context.startActivity(intent);returntrue;}}catch(Exceptione){Log.w(TAG,e);}returnfalse;}publicstaticStringgetAssetsFie(Contextcontext,Stringname)throwsIOException{InputStreamis=context.getAssets().open(name);intsize=is.available();// Read the entire asset into a local byte buffer.byte[]buffer=newbyte[size];is.read(buffer);is.close();Stringcontent=newString(buffer,"UTF-8");returncontent;}/**
* 是否为wifi连接状�??
*
* @param context
* @return
*/publicstaticbooleanisWifiConnect(Contextcontext){ConnectivityManagerconnectivitymanager=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfonetworkinfo=connectivitymanager.getActiveNetworkInfo();if(networkinfo!=null){if("wifi".equals(networkinfo.getTypeName().toLowerCase(Locale.US))){returntrue;}}returnfalse;}/**
* 是否有网络连�?
*
* @param context
* @return
*/publicstaticbooleanisNetConnect(Contextcontext){ConnectivityManagerconnectivitymanager=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfonetworkinfo=connectivitymanager.getActiveNetworkInfo();returnnetworkinfo!=null;}/**
* 获取权限
*
* @param permission
* 权限
* @param path
* 文件路径
*/publicstaticvoidchmod(Stringpermission,Stringpath){try{Stringcommand="chmod "+permission+" "+path;Runtimeruntime=Runtime.getRuntime();runtime.exec(command);}catch(IOExceptione){Log.e(TAG,"chmod",e);}}/**
* 是否安装了sdcard�?
*
* @return true表示有,false表示没有
*/publicstaticbooleanhaveSDCard(){if(android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)){returntrue;}returnfalse;}/**
* 获取系统内部可用空间大小
*
* @return available size
*/publicstaticlonggetSystemAvailableSize(){Fileroot=Environment.getRootDirectory();StatFssf=newStatFs(root.getPath());longblockSize=sf.getBlockSize();longavailCount=sf.getAvailableBlocks();returnavailCount*blockSize;}/**
* 获取sd卡可用空间大�?
*
* @return available size
*/publicstaticlonggetSDCardAvailableSize(){longavailable=0;if(haveSDCard()){Filepath=Environment.getExternalStorageDirectory();StatFsstatfs=newStatFs(path.getPath());longblocSize=statfs.getBlockSize();longavailaBlock=statfs.getAvailableBlocks();available=availaBlock*blocSize;}else{available=-1;}returnavailable;}/**
* 获取application层级的metadata
*
* @param context
* @param key
* @return
*/publicstaticStringgetApplicationMetaData(Contextcontext,Stringkey){try{ObjectmetaObj=context.getPackageManager().getApplicationInfo(context.getPackageName(),PackageManager.GET_META_DATA).metaData.get(key);if(metaObjinstanceofString){returnmetaObj.toString();}elseif(metaObjinstanceofInteger){return((Integer)metaObj).intValue()+"";}elseif(metaObjinstanceofBoolean){return((Boolean)metaObj).booleanValue()+"";}}catch(NameNotFoundExceptione){Log.w(TAG,e);}return"";}/**
* 获取版本�?
*
* @param context
* @return
*/publicstaticStringgetVersionName(Contextcontext){try{returncontext.getPackageManager().getPackageInfo(context.getPackageName(),0).versionName;}catch(NameNotFoundExceptione){Log.w(TAG,e);}returnnull;}/**
* 获取版本�?
*
* @param context
* @return
*/publicstaticintgetVersionCode(Contextcontext){try{returncontext.getPackageManager().getPackageInfo(context.getPackageName(),0).versionCode;}catch(NameNotFoundExceptione){Log.w(TAG,e);}return0;}/**
* 将px值转换为dip或dp值,保证尺寸大小不变
*
* @param pxValue
* @param scale
* (DisplayMetrics类中属�?�density�?
* @return
*/publicstaticintpx2dip(Contextcontext,floatpxValue){floatscale=context.getResources().getDisplayMetrics().density;return(int)(pxValue/scale+0.5f);}/**
* 将dip或dp值转换为px值,保证尺寸大小不变
*
* @param dipValue
* @param scale
* (DisplayMetrics类中属�?�density�?
* @return
*/publicstaticintdip2px(Contextcontext,floatdipValue){floatscale=context.getResources().getDisplayMetrics().density;return(int)(dipValue*scale+0.5f);}/**
* 将px值转换为sp值,保证文字大小不变
*
* @param pxValue
* @param fontScale
* (DisplayMetrics类中属�?�scaledDensity�?
* @return
*/publicstaticintpx2sp(Contextcontext,floatpxValue){floatfontScale=context.getResources().getDisplayMetrics().scaledDensity;return(int)(pxValue/fontScale+0.5f);}/**
* 将sp值转换为px值,保证文字大小不变
*
* @param spValue
* @param fontScale
* (DisplayMetrics类中属�?�scaledDensity�?
* @return
*/publicstaticintsp2px(Contextcontext,floatspValue){floatfontScale=context.getResources().getDisplayMetrics().scaledDensity;return(int)(spValue*fontScale+0.5f);}/**
* 隐藏键盘
*
* @param activity
* activity
*/publicstaticvoidhideInputMethod(Activityactivity){hideInputMethod(activity,activity.getCurrentFocus());}/**
* 隐藏键盘
*
* @param context
* context
* @param view
* The currently focused view
*/publicstaticvoidhideInputMethod(Contextcontext,Viewview){if(context==null||view==null){return;}InputMethodManagerimm=(InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);if(imm!=null){imm.hideSoftInputFromWindow(view.getWindowToken(),0);}}/**
* 显示输入键盘
*
* @param context
* context
* @param view
* The currently focused view, which would like to receive soft
* keyboard input
*/publicstaticvoidshowInputMethod(Contextcontext,Viewview){if(context==null||view==null){return;}InputMethodManagerimm=(InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);if(imm!=null){imm.showSoftInput(view,0);}}/**
* Bitmap缩放,注意源Bitmap在缩放后将会被回收�??
*
* @param origin
* @param width
* @param height
* @return
*/publicstaticBitmapgetScaleBitmap(Bitmaporigin,intwidth,intheight){floatoriginWidth=origin.getWidth();floatoriginHeight=origin.getHeight();Matrixmatrix=newMatrix();floatscaleWidth=((float)width)/originWidth;floatscaleHeight=((float)height)/originHeight;matrix.postScale(scaleWidth,scaleHeight);Bitmapscale=Bitmap.createBitmap(origin,0,0,(int)originWidth,(int)originHeight,matrix,true);origin.recycle();returnscale;}/**
* 计算某一时间与现在时间间隔的文字提示
*/publicstaticStringcountTimeIntervalText(longtime){longdTime=System.currentTimeMillis()-time;// 15分钟if(dTime<15*60*1000){return"刚刚";}elseif(dTime<60*60*1000){// �?小时return"�?小时�?";}elseif(dTime<24*60*60*1000){return(int)(dTime/(60*60*1000))+"小时�?";}else{returnDateFormat.format("MM-dd kk:mm",System.currentTimeMillis()).toString();}}/**
* 获取通知栏高�?
*
* @param context
* @return
*/publicstaticintgetStatusBarHeight(Contextcontext){intx=0,statusBarHeight=0;try{Class<?>c=Class.forName("com.android.internal.R$dimen");Objectobj=c.newInstance();Fieldfield=c.getField("status_bar_height");x=Integer.parseInt(field.get(obj).toString());statusBarHeight=context.getResources().getDimensionPixelSize(x);}catch(Exceptione1){e1.printStackTrace();}returnstatusBarHeight;}/**
* 获取标题栏高�?
*
* @param context
* @return
*/publicstaticintgetTitleBarHeight(Activitycontext){intcontentTop=context.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();returncontentTop-getStatusBarHeight(context);}/**
* 获取屏幕宽度,px
*
* @param context
* @return
*/publicstaticfloatgetScreenWidth(Contextcontext){DisplayMetricsdm=context.getResources().getDisplayMetrics();returndm.widthPixels;}/**
* 获取屏幕高度,px
*
* @param context
* @return
*/publicstaticfloatgetScreenHeight(Contextcontext){DisplayMetricsdm=context.getResources().getDisplayMetrics();returndm.heightPixels;}/**
* 获取屏幕像素密度
*
* @param context
* @return
*/publicstaticfloatgetDensity(Contextcontext){DisplayMetricsdm=context.getResources().getDisplayMetrics();returndm.density;}/**
* 获取scaledDensity
*
* @param context
* @return
*/publicstaticfloatgetScaledDensity(Contextcontext){DisplayMetricsdm=context.getResources().getDisplayMetrics();returndm.scaledDensity;}/**
* 获取当前小时分钟�?24小时�?
*
* @return
*/publicstaticStringgetTime24Hours(){SimpleDateFormatformatter=newSimpleDateFormat("HH:mm",Locale.CHINA);DatecurDate=newDate(System.currentTimeMillis());// 获取当前时间returnformatter.format(curDate);}/**
* 获取电池电量,0~1
*
* @param context
* @return
*/@SuppressWarnings("unused")publicstaticfloatgetBattery(Contextcontext){IntentbatteryInfoIntent=context.getApplicationContext().registerReceiver(null,newIntentFilter(Intent.ACTION_BATTERY_CHANGED));intstatus=batteryInfoIntent.getIntExtra("status",0);inthealth=batteryInfoIntent.getIntExtra("health",1);booleanpresent=batteryInfoIntent.getBooleanExtra("present",false);intlevel=batteryInfoIntent.getIntExtra("level",0);intscale=batteryInfoIntent.getIntExtra("scale",0);intplugged=batteryInfoIntent.getIntExtra("plugged",0);intvoltage=batteryInfoIntent.getIntExtra("voltage",0);inttemperature=batteryInfoIntent.getIntExtra("temperature",0);// 温度的单位是10�?Stringtechnology=batteryInfoIntent.getStringExtra("technology");return((float)level)/scale;}/**
* 获取手机名称
*
* @return
*/publicstaticStringgetMobileName(){returnandroid.os.Build.MANUFACTURER+" "+android.os.Build.MODEL;}/**
* 是否安装了sdcard�?
*
* @return true表示有,false表示没有
*/publicstaticbooleanhasSDCard(){if(android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)){returntrue;}returnfalse;}/**
* 获取sd卡可用空�?
*
* @return available size
*/publicstaticlonggetAvailableExternalSize(){longavailable=0;if(hasSDCard()){Filepath=Environment.getExternalStorageDirectory();StatFsstatfs=newStatFs(path.getPath());longblocSize=statfs.getBlockSize();longavailaBlock=statfs.getAvailableBlocks();available=availaBlock*blocSize;}else{available=-1;}returnavailable;}/**
* 获取内存可用空间
*
* @return available size
*/publicstaticlonggetAvailableInternalSize(){longavailable=0;if(hasSDCard()){Filepath=Environment.getRootDirectory();StatFsstatfs=newStatFs(path.getPath());longblocSize=statfs.getBlockSize();longavailaBlock=statfs.getAvailableBlocks();available=availaBlock*blocSize;}else{available=-1;}returnavailable;}/*
* 版本控制部分
*//**
* 是否�?2.2版本及以�?
*
* @return
*/publicstaticbooleanhasFroyo(){returnBuild.VERSION.SDK_INT>=Build.VERSION_CODES.FROYO;}/**
* 是否�?2.3版本及以�?
*
* @return
*/publicstaticbooleanhasGingerbread(){returnBuild.VERSION.SDK_INT>=Build.VERSION_CODES.GINGERBREAD;}/**
* 是否�?3.0版本及以�?
*
* @return
*/publicstaticbooleanhasHoneycomb(){returnBuild.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB;}/**
* 是否�?3.1版本及以�?
*
* @return
*/publicstaticbooleanhasHoneycombMR1(){returnBuild.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB_MR1;}/**
* 是否�?4.1版本及以�?
*
* @return
*/publicstaticbooleanhasJellyBean(){returnBuild.VERSION.SDK_INT>=Build.VERSION_CODES.JELLY_BEAN;}publicstaticStringgetPhoneType(){StringphoneType=android.os.Build.MODEL;Log.d(TAG,"phoneType is : "+phoneType);returnphoneType;}/**
* 获取系统版本�?
*
* @return
*/publicstaticStringgetOsVersion(){Stringosversion;intosversion_int=getOsVersionInt();osversion=osversion_int+"";returnosversion;}/**
* 获取系统版本�?
*
* @return
*/publicstaticintgetOsVersionInt(){returnBuild.VERSION.SDK_INT;}/**
* 获取ip地址
*
* @return
*/publicstaticStringgetHostIp(){try{for(Enumeration<NetworkInterface>en=NetworkInterface.getNetworkInterfaces();en.hasMoreElements();){NetworkInterfaceintf=en.nextElement();for(Enumeration<InetAddress>enumIpAddr=intf.getInetAddresses();enumIpAddr.hasMoreElements();){InetAddressinetAddress=enumIpAddr.nextElement();if(!inetAddress.isLoopbackAddress()&&InetAddressUtils.isIPv4Address(inetAddress.getHostAddress())){if(!inetAddress.getHostAddress().toString().equals("null")&&inetAddress.getHostAddress()!=null){returninetAddress.getHostAddress().toString().trim();}}}}}catch(Exceptionex){Log.e("WifiPreference IpAddress",ex.toString());}return"";}/**
* 获取手机号,几乎获取不到
*
* @param context
* @return
*/publicstaticStringgetPhoneNum(Contextcontext){TelephonyManagermTelephonyMgr=(TelephonyManager)context.getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);StringphoneNum=mTelephonyMgr.getLine1Number();returnTextUtils.isEmpty(phoneNum)?"":phoneNum;}/**
* 获取imei�?
*
* @param context
* @return
*/publicstaticStringgetPhoneImei(Contextcontext){TelephonyManagermTelephonyMgr=(TelephonyManager)context.getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);StringphoneImei=mTelephonyMgr.getDeviceId();Log.d(TAG,"IMEI is : "+phoneImei);returnTextUtils.isEmpty(phoneImei)?"":phoneImei;}/**
* 获取imsi�?
*
* @param context
* @return
*/publicstaticStringgetPhoneImsi(Contextcontext){TelephonyManagermTelephonyMgr=(TelephonyManager)context.getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);StringphoneImsi=mTelephonyMgr.getSubscriberId();Log.d(TAG,"IMSI is : "+phoneImsi);returnTextUtils.isEmpty(phoneImsi)?"":phoneImsi;}/**
* 获取mac地址
*
* @return
*/publicstaticStringgetLocalMacAddress(){StringMac=null;try{Stringpath="sys/class/net/wlan0/address";if((newFile(path)).exists()){FileInputStreamfis=newFileInputStream(path);byte[]buffer=newbyte[8192];intbyteCount=fis.read(buffer);if(byteCount>0){Mac=newString(buffer,0,byteCount,"utf-8");}fis.close();}if(Mac==null||Mac.length()==0){path="sys/class/net/eth0/address";FileInputStreamfis=newFileInputStream(path);byte[]buffer_name=newbyte[8192];intbyteCount_name=fis.read(buffer_name);if(byteCount_name>0){Mac=newString(buffer_name,0,byteCount_name,"utf-8");}fis.close();}if(Mac==null||Mac.length()==0){return"";}elseif(Mac.endsWith("\n")){Mac=Mac.substring(0,Mac.length()-1);}}catch(Exceptionio){Log.w(TAG,"Exception",io);}returnTextUtils.isEmpty(Mac)?"":Mac;}/**
* 获取重复字段�?多的个数
*
* @param s
* @return
*/publicstaticintgetRepeatTimes(Strings){if(TextUtils.isEmpty(s)){return0;}intmCount=0;char[]mChars=s.toCharArray();HashMap<Character,Integer>map=newHashMap<Character,Integer>();for(inti=0;i<mChars.length;i++){charkey=mChars[i];Integervalue=map.get(key);intcount=value==null?0:value.intValue();map.put(key,++count);if(mCount<count){mCount=count;}}returnmCount;}/**
* �?单判断是否为手机号码
*
* @param num
* @return
*/publicstaticbooleanisPhoneNum(Stringnum){// 确保每一位都是数�?return!TextUtils.isEmpty(num)&&num.matches("1[0-9]{10}")&&!isRepeatedStr(num)&&!isContinuousNum(num);}/**
* 判断是否400服务代码
*
* @param num
* @return
*/publicstaticbooleanis400or800(Stringnum){return!TextUtils.isEmpty(num)&&(num.startsWith("400")||num.startsWith("800"))&&num.length()==10;}/**
* 判断是否区域号码
*
* @param num
* @return
*/publicstaticbooleanisAdCode(Stringnum){return!TextUtils.isEmpty(num)&&num.matches("[0]{1}[0-9]{2,3}")&&!isRepeatedStr(num);}/**
* 判断是否座机号码
*
* @param num
* @return
*/publicstaticbooleanisPhoneHome(Stringnum){return!TextUtils.isEmpty(num)&&num.matches("[0-9]{7,8}")&&!isRepeatedStr(num);}/**
* 判断是否为重复字符串
*
* @param str
* ,需要检查的字符�?
*/publicstaticbooleanisRepeatedStr(Stringstr){if(TextUtils.isEmpty(str)){returnfalse;}intlen=str.length();if(len<=1){returnfalse;}else{charfirstChar=str.charAt(0);// 第一个字�?for(inti=1;i<len;i++){charnextChar=str.charAt(i);// 第i个字�?if(firstChar!=nextChar){returnfalse;}}returntrue;}}/**
* 判断字符串是否为连续数字 45678901�?
*/publicstaticbooleanisContinuousNum(Stringstr){if(TextUtils.isEmpty(str))returnfalse;if(!isNumbericString(str))returntrue;intlen=str.length();for(inti=0;i<len-1;i++){charcurChar=str.charAt(i);charverifyChar=(char)(curChar+1);if(curChar=='9')verifyChar='0';charnextChar=str.charAt(i+1);if(nextChar!=verifyChar){returnfalse;}}returntrue;}/**
* 判断字符串是否为连续字母 xyZaBcd�?
*/publicstaticbooleanisContinuousWord(Stringstr){if(TextUtils.isEmpty(str))returnfalse;if(!isAlphaBetaString(str))returntrue;intlen=str.length();Stringlocal=str.toLowerCase();for(inti=0;i<len-1;i++){charcurChar=local.charAt(i);charverifyChar=(char)(curChar+1);if(curChar=='z')verifyChar='a';charnextChar=local.charAt(i+1);if(nextChar!=verifyChar){returnfalse;}}returntrue;}/**
* 判断是否为纯数字
*
* @param str
* ,需要检查的字符�?
*/publicstaticbooleanisNumbericString(Stringstr){if(TextUtils.isEmpty(str)){returnfalse;}Patternp=Pattern.compile("^[0-9]+$");// 从开头到结尾必须全部为数�?Matcherm=p.matcher(str);returnm.find();}/**
* 判断是否为纯字母
*
* @param str
* @return
*/publicstaticbooleanisAlphaBetaString(Stringstr){if(TextUtils.isEmpty(str)){returnfalse;}Patternp=Pattern.compile("^[a-zA-Z]+$");// 从开头到结尾必须全部为字母或者数�?Matcherm=p.matcher(str);returnm.find();}/**
* 判断是否为纯字母或数�?
*
* @param str
* @return
*/publicstaticbooleanisAlphaBetaNumbericString(Stringstr){if(TextUtils.isEmpty(str)){returnfalse;}Patternp=Pattern.compile("^[a-zA-Z0-9]+$");// 从开头到结尾必须全部为字母或者数�?Matcherm=p.matcher(str);returnm.find();}privatestaticStringregEx="[\u4e00-\u9fa5]";privatestaticPatternpat=Pattern.compile(regEx);/**
* 判断是否包含中文
*
* @param str
* @return
*/publicstaticbooleanisContainsChinese(Stringstr){returnpat.matcher(str).find();}publicstaticbooleanpatternMatcher(Stringpattern,Stringinput){if(TextUtils.isEmpty(pattern)||TextUtils.isEmpty(input)){returnfalse;}Patternpat=Pattern.compile(pattern);Matchermatcher=pat.matcher(input);returnmatcher.find();}/****************************************************************************/// import PPutilsprivatestaticintid=1;publicstaticintgetNextId(){returnid++;}/**
* 将输入流转为字节数组
*
* @param inStream
* @return
* @throws Exception
*/publicstaticbyte[]read2Byte(InputStreaminStream)throwsException{ByteArrayOutputStreamoutSteam=newByteArrayOutputStream();byte[]buffer=newbyte[1024];intlen=0;while((len=inStream.read(buffer))!=-1){outSteam.write(buffer,0,len);}outSteam.close();inStream.close();returnoutSteam.toByteArray();}/**
* 判断是否符合月和年的过期时间规则
*
* @param date
* @return
*/publicstaticbooleanisMMYY(Stringdate){try{if(!TextUtils.isEmpty(date)&&date.length()==4){intmm=Integer.parseInt(date.substring(0,2));returnmm>0&&mm<13;}}catch(Exceptione){Log.e(TAG,"Exception",e);}returnfalse;}/**
* 20120506 共八位,前四�?-年,中间两位-月,�?后两�?-�?
*
* @param date
* @return
*/publicstaticbooleanisRealDate(Stringdate,intyearlen){// if(yearlen != 2 && yearlen != 4)// return false;intlen=4+yearlen;if(date==null||date.length()!=len)returnfalse;if(!date.matches("[0-9]+"))returnfalse;intyear=Integer.parseInt(date.substring(0,yearlen));intmonth=Integer.parseInt(date.substring(yearlen,yearlen+2));intday=Integer.parseInt(date.substring(yearlen+2,yearlen+4));if(year<=0)returnfalse;if(month<=0||month>12)returnfalse;if(day<=0||day>31)returnfalse;switch(month){case4:case6:case9:case11:returnday>30?false:true;case2:if(year%4==0&&year%100!=0||year%400==0)returnday>29?false:true;returnday>28?false:true;default:returntrue;}}/**
* 判断字符串是否为连续字符 abcdef 45678�?
*/publicstaticbooleanisContinuousStr(Stringstr){if(TextUtils.isEmpty(str))returnfalse;intlen=str.length();for(inti=0;i<len;i++){charcurChar=str.charAt(i);charnextChar=(char)(curChar+1);if(i+1<len){nextChar=str.charAt(i+1);}if(nextChar!=(curChar+1)){returnfalse;}}returntrue;}publicstaticfinalStringREGULAR_NUMBER="(-?[0-9]+)(,[0-9]+)*(\\.[0-9]+)?";/**
* 为字符串中的数字染颜�?
*
* @param str
* ,待处理的字符串
* @param color
* ,需要染的颜�?
* @return
*/publicstaticSpannableStringsetDigitalColor(Stringstr,intcolor){if(str==null)returnnull;SpannableStringspan=newSpannableString(str);Patternp=Pattern.compile(REGULAR_NUMBER);Matcherm=p.matcher(str);while(m.find()){intstart=m.start();intend=start+m.group().length();span.setSpan(newForegroundColorSpan(color),start,end,Spannable.SPAN_EXCLUSIVE_INCLUSIVE);}returnspan;}publicstaticbooleanisChineseByREG(Stringstr){if(str==null){returnfalse;}Patternpattern=Pattern.compile("[\\u4E00-\\u9FBF]+");returnpattern.matcher(str.trim()).find();}publicstaticStringgetFixedNumber(Stringstr,intlength){if(str==null||length<=0||str.length()<length){returnnull;}Log.d(TAG,"getFixedNumber, str is : "+str);Patternp=Pattern.compile("\\d{"+length+"}");Matcherm=p.matcher(str);Stringresult=null;if(m.find()){intstart=m.start();intend=start+m.group().length();result=str.substring(start,end);}returnresult;}publicstaticintgetLengthWithoutSpace(CharSequences){intlen=s.length();intrlen=0;for(inti=0;i<len;i++){if(s.charAt(i)!=' ')rlen++;}returnrlen;}/**
* 获取控件的宽度,如果获取的高度为0,则重新计算尺寸后再返回高度
*
* @param view
* @return
*/publicstaticintgetViewMeasuredWidth(TextViewview){// int height = view.getMeasuredHeight();// if(0 < height){// return height;// }calcViewMeasure(view);returnview.getMeasuredWidth();}/**
* 获取控件的高度,如果获取的高度为0,则重新计算尺寸后再返回高度
*
* @param view
* @return
*/publicstaticintgetViewMeasuredHeight(TextViewview){// int height = view.getMeasuredHeight();// if(0 < height){// return height;// }calcViewMeasure(view);returnview.getMeasuredHeight();}/**
* 测量控件的尺�?
*
* @param view
*/publicstaticvoidcalcViewMeasure(Viewview){// int width =// View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);// int height =// View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);// view.measure(width,height);intwidth=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);intexpandSpec=View.MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,View.MeasureSpec.AT_MOST);view.measure(width,expandSpec);}publicstaticStringgetDisDsrc(floatdis){if(dis<=0){return"";}StringdisStr=null;if(dis>1000){disStr=(float)Math.round(dis/1000*10)/10+"km";}else{disStr=dis+"m";}returndisStr;}publicstaticbooleanisValidDate(Stringstr){booleanconvertSuccess=true;// 指定日期格式为四位年/两位月份/两位日期,注意yyyy/MM/dd区分大小写;SimpleDateFormatformat=newSimpleDateFormat("yyyy-MM");try{// 设置lenient为false.// 否则SimpleDateFormat会比较宽松地验证日期,比�?2007/02/29会被接受,并转换�?2007/03/01format.setLenient(false);format.parse(str);}catch(ParseExceptione){// e.printStackTrace();// 如果throw java.text.ParseException或�?�NullPointerException,就说明格式不对convertSuccess=false;}returnconvertSuccess;}}