整理Android项目开发中使用频率很高的小方法

本文提供了一系列Android开发中常用的工具方法,包括网络状态检查、文件操作、设备信息获取等实用功能,旨在帮助开发者提高开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

整理Android项目开发中使用频率很高的小方法,不用每次再写

public class Common {

	/**
	 * 判断网络连接是否打开
	 */
	public static boolean CheckNetwork(Context ctx) {
		boolean flag = false;
		ConnectivityManager netManager = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
		if (netManager.getActiveNetworkInfo() != null) {
			flag = netManager.getActiveNetworkInfo().isAvailable();
		}
		return flag;
	}

	/**
	 * 获取Manifest中的meta-data值
	 * @param context
	 * @param metaKey
	 * @return
	 */
	public static String getMetaValue(Context context, String metaKey) {
		Bundle metaData = null;
		String values = null;
		if (context == null || metaKey == null) {
			return null;
		}
		try {
			ApplicationInfo ai = context.getPackageManager().getApplicationInfo(context.getPackageName(),
					PackageManager.GET_META_DATA);
			if (null != ai) {
				metaData = ai.metaData;
			}
			if (null != metaData) {
				values = metaData.getString(metaKey);
			}
		} catch (NameNotFoundException e) {

		}
		return values;
	}

	/**
	 * 获取软件版本
	 */
	public static String thisVersion(Context context) {
		final String unknown = "Unknown";
		if (context == null)
			return unknown;
		try {
			String ret = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
			if (ret.contains(" + "))
				ret = ret.substring(0, ret.indexOf(" + ")) + "b";
			return ret;
		} catch (NameNotFoundException ex) {
		}
		return unknown;
	}

	/**
	 * 判断是否装有SD卡、是否可读写、是否有空间
	 * 
	 * @param size 需存入的文件大小,SD剩余空间必须大于该值
	 * @return true可用,false不可用
	 */
	public static boolean checkSDStatus(long size) {
		try {
			/* 读取SD卡大小 */
			File storage = Environment.getExternalStorageDirectory();
			StatFs stat = new StatFs(storage.getPath());
			long blocks = stat.getAvailableBlocks();
			long blocksize = stat.getBlockSize();

			/* 判断 */
			if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) && (blocks * blocksize) > size) {
				return true;
			} else {
				return false;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}

	/**
	 * 字节的大小,转成口头语
	 * @param size
	 * @return
	 */
	public static String byte2Oral(double size) {
		DecimalFormat df = new DecimalFormat("0.0");
		StringBuffer datas = new StringBuffer();
		if (size < 1048576) {
			datas.append((int) (size / 1024)).append("KB");
		} else if (size > 1048576) {
			datas.append(df.format((size / 1048576))).append("MB");
		} else if (size < 1024) {
			datas.append(size).append("B");
		}
		return datas.toString();
	}

	/**
	 * dip转px
	 * 
	 * @param dipValue
	 * @return
	 */
	public static int getPixels(Context ctx, int dipValue) {
		Resources r = ctx.getResources();
		int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, r.getDisplayMetrics());
		return px;
	}

	/**
	 * 判断当前应用程序是否处于后台,通过getRunningTasks的方式
	 * @return true 在后台; false 在前台
	 */
	public static boolean isApplicationBroughtToBackgroundByTask(String packageName, Context context) {
		ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
		List<RunningTaskInfo> tasks = activityManager.getRunningTasks(1);
		if (!tasks.isEmpty()) {
			ComponentName topActivity = tasks.get(0).topActivity;
			if (!topActivity.getPackageName().equals(packageName)) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 获取包名
	 * @param ctx
	 * @return
	 */
	public static String getPackageName(Context ctx) {
		try {
			PackageInfo info = ctx.getPackageManager().getPackageInfo(ctx.getPackageName(), 0);
			return info.packageName;
		} catch (NameNotFoundException e) {
			e.printStackTrace();
			return null;
		}
	}
	/**
	 * 取缓存的路径,存储卡的话,至少得1M空间
	 * 
	 * @return
	 */
	public static File getCachePath(Context ctx, String uniqueName) {
		if (Common.checkSDStatus(1)) {
			// 有存储卡的情况下,存入应用本身的缓存目录
			// 路径为:/storage/emulated/0/Android/data/com.example.roamtest/cache
			return new File(ctx.getExternalCacheDir().getPath(), uniqueName);
		} else {
			// 无存储卡的情况下,存入内置空间
			// 路径为:/data/data/com.example.roamtest/cache
			return new File(ctx.getCacheDir().getPath(), uniqueName);
		}
	}

	/**
	 * 判断字符串是否有空
	 * @param str
	 * @return
	 */
	public static String doNullStr(String str) {
		return TextUtils.isEmpty(str) ? "" : str;
	}

	/**
	 * 获取设备信息
	 * @param context
	 * @return
	 */
	public static Map<String, String> getDeviceInfo(Context context) {
		Map<String, String> map = new HashMap<String, String>();
		android.telephony.TelephonyManager tm = (android.telephony.TelephonyManager) context
				.getSystemService(Context.TELEPHONY_SERVICE);

		String device_id = tm.getDeviceId();
		String msisdn = tm.getLine1Number(); // 手机号码
		String iccid = tm.getSimSerialNumber(); // sim卡号ICCID
		String imsi = tm.getSubscriberId(); // imsi		

		android.net.wifi.WifiManager wifi = (android.net.wifi.WifiManager) context
				.getSystemService(Context.WIFI_SERVICE);

		int i = wifi.getConnectionInfo().getIpAddress();
		String ip = ((i & 0xff) + "." + (i >> 8 & 0xff) + "." + (i >> 16 & 0xff) + "." + (i >> 24 & 0xff));
		String mac = wifi.getConnectionInfo().getMacAddress();

		if (TextUtils.isEmpty(device_id)) {
			device_id = mac;
		}

		if (TextUtils.isEmpty(device_id)) {
			device_id = android.provider.Settings.Secure.getString(context.getContentResolver(),
					android.provider.Settings.Secure.ANDROID_ID);
		}

		map.put("ip", doNullStr(ip));
		map.put("mac", doNullStr(mac));
		map.put("device_id", doNullStr(device_id));
		map.put("msisdn", doNullStr(msisdn));
		map.put("iccid", doNullStr(iccid));
		map.put("imsi", doNullStr(imsi));

		return map;
	}

	/**
	 * 复制文件至某个文件夹
	 * @param srcFileName 源文件完整路径
	 * @param destDirName 目的目录完整路径,包含文件名
	 * @return
	 */
	public static boolean copyFileToFile(String srcFileName, String destDirName) {
		try {
			int byteread = 0;
			File oldfile = new File(srcFileName);
			if (oldfile.exists()) {
				InputStream inStream = new FileInputStream(oldfile);
				FileOutputStream fs = new FileOutputStream(destDirName);
				byte[] buffer = new byte[1444];
				while ((byteread = inStream.read(buffer)) != -1) {
					fs.write(buffer, 0, byteread);
				}
				inStream.close();
			}
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
	/**
	 * 判断是否是身份证
	 * 
	 * @param identifyCard
	 */
	public static boolean isIdentifyCard(String identifyCard){
		Pattern p = Pattern.compile("(\\d{14}[0-9a-zA-Z])|(\\d{17}[0-9a-zA-Z])");
		Matcher m = p.matcher(identifyCard);
		return m.matches();		
	}
	/**
	 * 判断电话号码是否有效
	 * 移动:134、135、136、137、138、139、147、150、151、152、157、158、159、182、183、187、188
	 * 联通:130、131、132、145、155、156、185、186
	 * 电信:133、153、180、181、189
	 * 虚拟运营商:17x
	 */
	public static boolean isMobileNO(String number) {
		if (number.startsWith("+86")) {
			number = number.substring(3);
		}

		if (number.startsWith("+") || number.startsWith("0")) {
			number = number.substring(1);
		}

		number = number.replace(" ", "").replace("-", "");
		System.out.print("号码:" + number);

		Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0-3,5-9])|(17[0-9]))\\d{8}$");
		Matcher m = p.matcher(number);

		return m.matches();
	}

	/**
	 * 号码的运营商类型
	 * 
	 * @param number
	 * @return
	 */
	public static String getMobileType(String number) {
		String type = "未知用户";
		Pattern p = Pattern.compile("^(([4,8]00))\\d{7}$");
		if (p.matcher(number).matches())
			return "企业电话";

		if (number.startsWith("+86")) {
			number = number.substring(3);
		}

		if (number.startsWith("+") || number.startsWith("0")) {
			number = number.substring(1);
		}

		number = number.replace(" ", "").replace("-", "");
		System.out.print("号码:" + number);

		p = Pattern.compile("^((13[4-9])|(147)|(15[0-2,7-9])|(18[2,3,7,8]))\\d{8}$");
		if (p.matcher(number).matches())
			return "移动用户";

		p = Pattern.compile("^((13[0-2])|(145)|(15[5,6])|(18[5,6]))\\d{8}$");
		if (p.matcher(number).matches())
			return "联通用户";

		p = Pattern.compile("^((1[3,5]3)|(18[0,1,9]))\\d{8}$");
		if (p.matcher(number).matches())
			return "电信用户";

		p = Pattern.compile("^((17[0-9]))\\d{8}$");
		if (p.matcher(number).matches())
			return "虚拟运营端";

		if (number.length() >= 7 && number.length() <= 12)
			return "固话用户";

		return type;
	}

	/**
	 * 获取随机数
	 * @param iRdLength
	 * @return
	 */
	public static String getRandom(int iRdLength) {
		Random rd = new Random();
		int iRd = rd.nextInt();
		if (iRd < 0) { // 负数时转换为正数
			iRd *= -1;
		}
		String sRd = String.valueOf(iRd);
		int iLgth = sRd.length();
		if (iRdLength > iLgth) { // 获取数长度超过随机数长度
			return digitToString(iRd, iRdLength);
		} else {
			return sRd.substring(iLgth - iRdLength, iLgth);
		}
	}

	/**
	 * 把一个整数转化为一个n位的字符串
	 * @param digit
	 * @param n
	 * @return
	 */
	public static String digitToString(int digit, int n) {
		String result = "";
		for (int i = 0; i < n - String.valueOf(digit).length(); i++) {
			result = result + "0";
		}
		result = result + String.valueOf(digit);
		return result;
	}
		
	/**
	 * 计算MD5
	 * @param str
	 * @return
	 */
	public static String MD5(String str) {
		try {
			MessageDigest md = MessageDigest.getInstance("MD5");
			md.update(str.getBytes("utf-8"));
			byte[] result = md.digest();
			StringBuffer sb = new StringBuffer(32);
			for (int i = 0; i < result.length; i++) {
				int val = result[i] & 0xff;
				if (val <= 0xf) {
					sb.append("0");
				}
				sb.append(Integer.toHexString(val));
			}
			return sb.toString();//.toUpperCase();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
			return "";
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
			return "";
		}
	}
	public static String double_convert(double value) {
		long l1 = Math.round(value * 100);//四舍五入 
		double ret = l1 / 100.0;//注意:使用100.0,而不是 100
		if (ret - (int) ret == 0) {
			return (int) ret + "";
		} else {
			return ret + "";
		}
	}

	/**
	 * 根据字符串,计算出其占用的宽度
	 * @param str
	 * @param textsize
	 * @return
	 */
	public static float getTextWidthFontPx(String str, float textsize) {
		Paint mPaint = new Paint();
		mPaint.setTextSize(textsize);
		return str.length() * mPaint.getFontSpacing();
	}
	private static final double EARTH_RADIUS =6378137.0;
	 // 返回单位是米  
	 public static double getDistance(double longitude1, double latitude1,  
	   double longitude2, double latitude2) {  
	  double Lat1 = rad(latitude1);  
	  double Lat2 = rad(latitude2);  
	  double a = Lat1 - Lat2;  
	  double b = rad(longitude1) - rad(longitude2);  
	  double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)  
	    + Math.cos(Lat1) * Math.cos(Lat2)  
	    * Math.pow(Math.sin(b / 2), 2)));  
	  s = s * EARTH_RADIUS;  
	  s = Math.round(s * 10000) / 10000;  
	  return s;  
	 }  
	 private static double rad(double d) {  
	  return d * Math.PI / 180.0;  
	 }  
}


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值