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程序设计有所帮助。