Android开发之超实用的系统管理工具类【SD卡,网络,uri,屏幕,网络,软键盘,文本,进程等】
本文实例讲述了Android开发之超实用的系统管理工具类。分享给大家供大家参考,具体如下:
这是一个系统管理工具类,管理sd卡,判断网络,uri转换,获取屏幕宽高,获取网络类型,隐藏软键盘,复制文本到粘贴板,获取状态栏高度,获取当前进程等。
上代码
importjava.io.File; importandroid.annotation.SuppressLint; importandroid.annotation.TargetApi; importandroid.app.Activity; importandroid.app.ActivityManager; importandroid.content.ClipData; importandroid.content.Context; importandroid.database.Cursor; importandroid.net.ConnectivityManager; importandroid.net.NetworkInfo; importandroid.net.Uri; importandroid.os.Build; importandroid.os.Environment; importandroid.os.StatFs; importandroid.provider.MediaStore; importandroid.text.TextUtils; importandroid.util.DisplayMetrics; importandroid.view.View; importandroid.view.inputmethod.InputMethodManager; @SuppressWarnings("deprecation") publicclassSystemUtil{ publicstaticfinalintNETTYPE_WIFI=0x01; publicstaticfinalintNETTYPE_CMWAP=0x02; publicstaticfinalintNETTYPE_CMNET=0x03; /**判断是否手机插入Sd卡*/ publicstaticbooleansdCardUseable(){ returnEnvironment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); } /** *获取Sd卡的总容量 * *@return */ @SuppressLint("NewApi")publicstaticlonggetSdCardTotalSize(){ if(!sdCardUseable()){ return0; } //取得SD卡文件路径 Filepath=Environment.getExternalStorageDirectory(); StatFssf=newStatFs(path.getPath()); //获取单个数据块的大小(Byte) longblockSize=sf.getBlockSizeLong(); //获取所有数据块数 longallBlocks=sf.getBlockCountLong(); //返回SD卡大小 //returnallBlocks*blockSize;//单位Byte //return(allBlocks*blockSize)/1024;//单位KB return(allBlocks*blockSize)/1024/1024;//单位MB } /** *获取Sd卡的可用容量 * *@return */ @SuppressLint("NewApi")publicstaticlonggetSdCardFreeSize(){ if(!sdCardUseable()){ return0; } //取得SD卡文件路径 Filepath=Environment.getExternalStorageDirectory(); StatFssf=newStatFs(path.getPath()); //获取单个数据块的大小(Byte) longblockSize=sf.getBlockSizeLong(); //空闲的数据块的数量 longfreeBlocks=sf.getAvailableBlocksLong(); //返回SD卡空闲大小 //returnfreeBlocks*blockSize;//单位Byte //return(freeBlocks*blockSize)/1024;//单位KB return(freeBlocks*blockSize)/1024/1024;//单位MB } /** *判断是否联网或者漫游 * *@paramcontext *@returnboolean */ publicstaticbooleanhasNet(Contextcontext){ //获得ConnectivityManager的管理器 NetworkInfoinfo=((ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); if(info==null||!info.isConnected()){ returnfalse; } if(info.isRoaming()){//漫游判断 returntrue; } returntrue; } /**获得Thedatastreamforthefile*/ publicstaticStringgetUrlPath(Activitycontext,Uriuri){ String[]proj={MediaStore.Images.Media.DATA}; Cursorcursor=context.managedQuery(uri,proj,null,null,null); intcolumn_index=cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); returncursor.getString(column_index); } /**从传入Uri获得真实的path*/ publicStringgetRealPathFromURI(Activitycontext,UricontentUri){ //canpostimage String[]proj={MediaStore.Images.Media.DATA}; Cursorcursor=context.managedQuery(contentUri,proj,//Whichcolumns //toreturn null,//WHEREclause;whichrowstoreturn(allrows) null,//WHEREclauseselectionarguments(none) null);//Order-byclause(ascendingbyname) intcolumn_index=cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); returncursor.getString(column_index); } /**获得屏幕的宽度*/ publicstaticintgetScreenWidth(Activitycontext){ DisplayMetricsoutMetrics=newDisplayMetrics(); context.getWindowManager().getDefaultDisplay().getMetrics(outMetrics); returnoutMetrics.widthPixels; } /**获取屏幕的高度*/ publicstaticintgetScreenHeight(Activitycontext){ DisplayMetricsoutMetrics=newDisplayMetrics(); context.getWindowManager().getDefaultDisplay().getMetrics(outMetrics); returnoutMetrics.heightPixels; } /**获得网络的类型*/ publicstaticintgetNetworkType(Contextcontext){ intnetType=0; ConnectivityManagerconnectivityManager=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfonetworkInfo=connectivityManager.getActiveNetworkInfo(); if(networkInfo==null){//判断是否联网 returnnetType; } intnType=networkInfo.getType();//获得 if(nType==ConnectivityManager.TYPE_MOBILE){ StringextraInfo=networkInfo.getExtraInfo(); if(!TextUtils.isEmpty(extraInfo)){ if(extraInfo.toLowerCase().equals("cmnet")){ netType=NETTYPE_CMNET; }else{ netType=NETTYPE_CMWAP; } } }elseif(nType==ConnectivityManager.TYPE_WIFI){ netType=NETTYPE_WIFI; } returnnetType; } /**隐藏软件盘*/ publicstaticvoidhideSoftKeyborad(Activitycontext){ finalViewv=context.getWindow().peekDecorView();//Retrievethe //currentdecor //view if(v!=null&&v.getWindowToken()!=null){ InputMethodManagerimm=(InputMethodManager)context//获得输入方法的Manager .getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(v.getWindowToken(),0); } } /** *复制文本到剪切板 * *@paramcontext *@paramtext */ @TargetApi(value=11) @SuppressLint({"NewApi","NewApi"}) publicstaticvoidcopyText(Contextcontext,Stringtext){ if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB){ android.content.ClipboardManagerclipboardManager=(android.content.ClipboardManager)context .getSystemService(Context.CLIPBOARD_SERVICE); ClipDataclipData=ClipData.newPlainText("label",text); clipboardManager.setPrimaryClip(clipData); }else{ android.text.ClipboardManagerclipboardManager=(android.text.ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE); clipboardManager.setText(text); } } /** *获取状态栏高度 * *@return */ publicstaticintgetStatusBarHeight(Contextcontext){ Class>c=null; Objectobj=null; java.lang.reflect.Fieldfield=null; intx=0; intstatusBarHeight=0; try{ c=Class.forName("com.android.internal.R$dimen"); obj=c.newInstance(); field=c.getField("status_bar_height"); x=Integer.parseInt(field.get(obj).toString()); statusBarHeight=context.getResources().getDimensionPixelSize(x); returnstatusBarHeight; }catch(Exceptione){ e.printStackTrace(); } returnstatusBarHeight; } /** *获取当前进程名 *@paramcontext *@return进程名 */ publicstaticfinalStringgetProcessName(Contextcontext){ StringprocessName=null; //ActivityManager ActivityManageram=((ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE)); while(true){ for(ActivityManager.RunningAppProcessInfoinfo:am.getRunningAppProcesses()){ if(info.pid==android.os.Process.myPid()){ processName=info.processName; break; } } //gohome if(!TextUtils.isEmpty(processName)){ returnprocessName; } //takearestandagain try{ Thread.sleep(100L); }catch(InterruptedExceptionex){ ex.printStackTrace(); } } } }
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。