写过安卓程序的朋友就知道,安卓程序经常用到对系统信息的获取,比如屏幕分辨率等等,虽然这些方法很多人都会,但现场写还是麻烦,下面是常用的方法。
复制
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
/**
* Md5 32位 or 16位 加密
*
* @param plainText
* @return 32位加密
*/
public static String Md5(String plainText) {
StringBuffer buf = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(plainText.getBytes());
byte b[] = md.digest();
int i;
buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0) i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return buf.toString();
}
/**
* 手机号正则判断
* @param str
* @return
* @throws PatternSyntaxException
*/
public static boolean isPhoneNumber(String str) throws PatternSyntaxException {
if (str != null) {
String pattern = "(13\\d|14[579]|15[^4\\D]|17[^49\\D]|18\\d)\\d{8}";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(str);
return m.matches();
} else {
return false;
}
}
/**
* 检测当前网络的类型 是否是wifi
*
* @param context
* @return
*/
public static int checkedNetWorkType(Context context) {
if (!checkedNetWork(context)) {
return 0;//无网络
}
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting()) {
return 1;//wifi
} else {
return 2;//非wifi
}
}
/**
* 检查是否连接网络
*
* @param context
* @return
*/
public static boolean checkedNetWork(Context context) {
// 获得连接设备管理器
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm == null) return false;
/**
* 获取网络连接对象
*/
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
if (networkInfo == null || !networkInfo.isAvailable()) {
return false;
}
return true;
}
/**
* 检测GPS是否打开
*
* @return
*/
public static boolean checkGPSIsOpen(Context context) {
boolean isOpen;
LocationManager locationManager = (LocationManager) context
.getSystemService(Context.LOCATION_SERVICE);
if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)||locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
isOpen=true;
}else{
isOpen = false;
}
return isOpen;
}
/**
* 跳转GPS设置
*/
public static void openGPSSettings(final Context context) {
if (checkGPSIsOpen(context)) {
// initLocation(); //自己写的定位方法
} else {
// //没有打开则弹出对话框
AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.AlertDialogCustom);
builder.setTitle("温馨提示");
builder.setMessage("当前应用需要打开定位功能。请点击\"设置\"-\"定位服务\"打开定位功能。");
//设置对话框是可取消的
builder.setCancelable(false);
builder.setPositiveButton("设置", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
//跳转GPS设置界面
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
context.startActivity(intent);
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
ActivityManager.getInstance().exit();
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
}
}
/**
* 字符串进行Base64编码
* @param str
*/
public static String StringToBase64(String str){
String encodedString = Base64.encodeToString(str.getBytes(), Base64.DEFAULT);
return encodedString;
}
/**
* 字符串进行Base64解码
* @param encodedString
* @return
*/
public static String Base64ToString(String encodedString){
String decodedString =new String(Base64.decode(encodedString,Base64.DEFAULT));
return decodedString;
}
这里还有一个根据经纬度计算两点间真实距离的,一般都直接使用所集成第三方地图SDK中包含的方法,这里还是给出代码
复制
/**
* 补充:计算两点之间真实距离
*
* @return 米
*/
public static double getDistance(double longitude1, double latitude1, double longitude2, double latitude2) {
// 维度
double lat1 = (Math.PI / 180) * latitude1;
double lat2 = (Math.PI / 180) * latitude2;
// 经度
double lon1 = (Math.PI / 180) * longitude1;
double lon2 = (Math.PI / 180) * longitude2;
// 地球半径
double R = 6371;
// 两点间距离 km,如果想要米的话,结果*1000就可以了
double d = Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1)) * R;
return d * 1000;
}
以上代码来自安卓巴士,感谢网友的分享。
关注代码狗博客,给你带来更多方法,快速构建你的程序。
评论 (0)