android 常用工具方法集合1.0.1
2016-09-09 09:06
344 查看
通过应用包名启动这个应用,可以启动系统应用
private void doStartApplicationWithPackageName(String packagename) {//
通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等
PackageInfo packageinfo = null;
try {
packageinfo = getPackageManager().getPackageInfo(packagename, 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (packageinfo ==null) {
return;
}
//
创建一个类别为CATEGORY_LAUNCHER的该包名的Intent
Intent resolveIntent = new Intent(Intent.ACTION_MAIN,null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(packageinfo.packageName);
//
通过getPackageManager()的queryIntentActivities方法遍历
List<ResolveInfo> resolveinfoList = getPackageManager().queryIntentActivities(resolveIntent, 0);
ResolveInfo resolveinfo = resolveinfoList.iterator().next();
if (resolveinfo !=null) {
//
packagename =参数packname
String packageName = resolveinfo.activityInfo.packageName;
//
这个就是我们要找的该APP的LAUNCHER的Activity[组织形式:packagename.mainActivityname]
String className = resolveinfo.activityInfo.name;
// LAUNCHER Intent
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
//
设置ComponentName参数1:packagename参数2:MainActivity路径
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
startActivity(intent);
}
}
压缩图片,通常用来解决图片过大引起的OOM问题,防止内存溢出
private Bitmap imageZoom(Bitmap bitMap) {//
图片允许最大空间 单位:KB
double maxSize = 400.00;
//
将bitmap放至数组中,意在bitmap的大小(与实际读取的原文件要大)
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitMap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
//
将字节换成KB
double mid = b.length / 1024;
//
判断bitmap占用空间是否大于允许最大空间 如果大于则压缩 小于则不压缩
if (mid > maxSize) {
//
获取bitmap大小 是允许最大大小的多少倍
double i = mid / maxSize;
//
获取这个图片的宽和高
float width = bitMap.getWidth();
float height = bitMap.getHeight();
//
创建操作图片用的matrix对象
Matrix matrix = new Matrix();
//
计算宽高缩放率
float scaleWidth = ((float) (bitMap.getWidth() / Math.sqrt(i))) / width;
float scaleHeight = ((float) (bitMap.getHeight() / Math.sqrt(i))) / height;
//
缩放图片动作
matrix.postScale(scaleWidth, scaleHeight);
bitMap = Bitmap.createBitmap(bitMap, 0, 0, (int) width, (int) height, matrix,true);
}
return bitMap;
}
动态设置GridView高度
public static void setGridViewHight(GridView listView) {//
获取listview的adapter
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter ==null) {
return;
}
//
固定列宽,有多少列
int col = 3;// listView.getNumColumns();
int totalHeight = 0;
// i每次加4,相当于listAdapter.getCount()小于等于4时
循环一次,计算一次item的高度,
// listAdapter.getCount()小于等于8时计算两次高度相加
for (int i = 0; i < listAdapter.getCount(); i += col) {
//
获取listview的每一个item
View listItem = listAdapter.getView(i,
null, listView);
listItem.measure(0, 0);
//
获取item的高度和
totalHeight += listItem.getMeasuredHeight();
}
//
获取listview的布局参数
ViewGroup.LayoutParams params = listView.getLayoutParams();
//
设置高度
params.height = totalHeight;
//
设置margin
((ViewGroup.MarginLayoutParams) params).setMargins(10, 10, 10, 10);
//
设置参数
listView.setLayoutParams(params);
}
判断某个服务是否在运行,经测试发现这种方法只能检测服务有没有被杀死,不能检测内部的代码是否执行
public boolean isServiceWork(Context mContext, String serviceName) {boolean isWork =false;
ActivityManager myAM = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningServiceInfo> myList = myAM.getRunningServices(100);
if (myList.size() <= 0) {
return false;
}
for (int i = 0; i < myList.size(); i++) {
String mName = myList.get(i).service.getClassName().toString();
// Log.e(TAG, "-----服务名称:" + mName);
if (mName.equals(serviceName)) {
isWork = true;
break;
}
}
return isWork;
}
打印异常信息,可以打印堆栈信息,详细输出哪一行代码出现bug,方便apk打包后调试
public static void showException(String TAG, Exception e) {if (isShowLog) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
Log.e(TAG,
"---受捕获的异常:" + sw.toString());
}
}
获取一个app的签名
private String getAPKSign(String apkPath) {String PATH_PackageParser =
"android.content.pm.PackageParser";
try {
//
apk包的文件路径
//
这是一个Package 解释器,是隐藏的
//
构造函数的参数只有一个, apk文件的路径
// PackageParser packageParser = new PackageParser(apkPath);
Class pkgParserCls = Class.forName(PATH_PackageParser);
Class[] typeArgs = new Class[1];
typeArgs[0] = String.class;
Constructor pkgParserCt = pkgParserCls.getConstructor(typeArgs);
Object[] valueArgs = new Object[1];
valueArgs[0] = apkPath;
Object pkgParser = pkgParserCt.newInstance(valueArgs);
//
这个是与显示有关的, 里面涉及到一些像素显示等等,我们使用默认的情况
DisplayMetrics metrics = new DisplayMetrics();
metrics.setToDefaults();
// PackageParser.Package mPkgInfo = packageParser.parsePackage(new
// File(apkPath), apkPath,
// metrics, 0);
typeArgs = new Class[4];
typeArgs[0] = File.class;
typeArgs[1] = String.class;
typeArgs[2] = DisplayMetrics.class;
typeArgs[3] = Integer.TYPE;
Method pkgParser_parsePackageMtd = pkgParserCls.getDeclaredMethod("parsePackage", typeArgs);
valueArgs = new Object[4];
valueArgs[0] = new File(apkPath);
valueArgs[1] = apkPath;
valueArgs[2] = metrics;
valueArgs[3] = PackageManager.GET_SIGNATURES;
Object pkgParserPkg = pkgParser_parsePackageMtd.invoke(pkgParser, valueArgs);
typeArgs = new Class[2];
typeArgs[0] = pkgParserPkg.getClass();
typeArgs[1] = Integer.TYPE;
Method pkgParser_collectCertificatesMtd = pkgParserCls.getDeclaredMethod("collectCertificates", typeArgs);
valueArgs = new[/b] Object[2];
valueArgs[0] = pkgParserPkg;
valueArgs[1] = PackageManager.GET_SIGNATURES;
pkgParser_collectCertificatesMtd.invoke(pkgParser, valueArgs);
//
应用程序信息包, 这个公开的,不过有些函数,变量没公开
Field packageInfoFld = pkgParserPkg.getClass().getDeclaredField("mSignatures");
Signature[] info = (Signature[]) packageInfoFld.get(pkgParserPkg);
return info[0].toCharsString();
} catch (Exception e) {
ToastUtil.showException(TAG, e);
}
return null;
}
int类型的秒数转换成标准时间格式mm:SS
public static String secToTime(int time) {String timeStr = null;
int hour = 0;
int minute = 0;
int second = 0;
if (time <= 0){
return "00:00";
}else {
minute = time / 60;
}
if (minute < 60) {
second = time % 60;
timeStr = unitFormat(minute) +
":" + unitFormat(second);
} else {
hour = minute / 60;
if (hour > 99)
return "99:59:59";
minute = minute % 60;
second = time - hour * 3600 - minute * 60;
timeStr = unitFormat(hour) +
":" + unitFormat(minute) + ":" +unitFormat(second);
}
}
return timeStr;
}
public static String unitFormat(int i) {
String retStr = null;
if (i >= 0 && i < 10)
retStr =
"0" + Integer.toString(i);
else
retStr =
"" + i;
return retStr;
}
获取手机系统应用包名列表
public static List<String> getSysAppList(Context context) {List<PackageInfo> packages = context.getPackageManager().getInstalledPackages(0);
List<String> list = new ArrayList<String>();
for (int i = 0; i < packages.size(); i++) {
PackageInfo packageInfo = packages.get(i);
if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM)
!= 0) {
//
系统应用
list.add(packageInfo.packageName);
ToastUtil.showLogE(TAG,"---系统包名" + packageInfo.packageName);
}
}
return list;
}
根据包名获取app名称
public static String getAppName(Context context, String packageName) {PackageManager pm = context.getPackageManager();
String appName =
"";
try {
ApplicationInfo applicationInfo = pm.getApplicationInfo(packageName, 0);
appName = String.valueOf(pm.getApplicationLabel(applicationInfo));
} catch (Exception e) {
ToastUtil.showException(TAG, e);
e.printStackTrace();
}
return appName;
}
获取手机wifi状态下mac地址,4G状态下是没有mac地址的。,
public static String getMac(Context context) {WifiManager wifiMan = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifiMan.getConnectionInfo();
String mac = info.getMacAddress();//获得MAC地址
return mac;
}
获取手机可用内存
public static String getAvailMemory(Context context) {//获取android当前可用内存大小ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
MemoryInfo mi = new MemoryInfo();
am.getMemoryInfo(mi);
// mi.availMem;当前系统的可用内存
return Formatter.formatFileSize(context, mi.availMem);//将获取的内存大小规格化
}
获取系统内存总大小
public static String getTotalMemory(Context context) {String str1 =
"/proc/meminfo";//
系统内存信息文件
String str2;
String[] arrayOfString;
long initial_memory = 0;
try {
FileReader localFileReader = new FileReader(str1);
BufferedReader localBufferedReader =
new BufferedReader(localFileReader, 8192);
str2 = localBufferedReader.readLine();//读取meminfo第一行,系统总内存大小
arrayOfString = str2.split("\\s+");
initial_memory = Integer.valueOf(arrayOfString[1]).intValue() * 1024;//获得系统总内存,单位是KB,乘以1024转换为Byte
localBufferedReader.close();
} catch (Exception e) {
}
return Formatter.formatFileSize(context, initial_memory);// Byte转换为KB或者MB,内存大小规格化
}
相关文章推荐
- Android常用小工具的使用方法
- Android开发常用工具方法(CommonTools)
- Android常用开发工具、站点集合
- Android常用的工具方法(2)
- android开发常用工具方法
- android 常用方法集合
- Android 工具类】常用工具类(方法)大全
- Android调试方法及常用工具logCat的介绍
- Android常用的工具方法(1)
- Android android-common 常用功能和工具集合
- 【Android 工具类】常用工具类(方法)大全
- android 常用方法集合
- Android常用工具方法
- Android 常用的方法小工具总结
- Android常用源代码下载方法和工具
- 【Android 工具类】常用工具类(方法)大全
- android各种常用的方法集合
- Android开发中一些常用的工具方法
- Android 常用方法集合工具类CommonUtil
- Android开发常用工具方法