package com.yiwen.mobike.utils; import android.app.Activity; import android.app.ActivityManager; import android.app.PendingIntent; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.graphics.Color; import android.location.LocationManager; import android.net.Uri; import android.os.PowerManager; import android.provider.Settings; import android.text.SpannableString; import android.text.Spanned; import android.text.style.ForegroundColorSpan; import android.text.style.RelativeSizeSpan; import android.util.DisplayMetrics; import android.util.Log; import android.view.Gravity; import android.view.Window; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.widget.TextView; import com.yiwen.mobike.R; import com.yiwen.mobike.views.SelectDialog; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; public class Utils { private static PowerManager.WakeLock mWakeLock; public static InputMethodManager imm; Activity activity; public Utils(Activity activity){ this.activity=activity; if(imm==null) imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); } public void hideIMM() { imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } public void showIMM() { imm.toggleSoftInput(0, InputMethodManager.RESULT_SHOWN); } // 距离转换 public static String distanceFormatter(int distance) { if (distance < 1000) { return distance + "米"; } else if (distance % 1000 == 0) { return distance / 1000 + "公里"; } else { DecimalFormat df = new DecimalFormat("0.0"); int a1 = distance / 1000; // 十位 double a2 = distance % 1000; double a3 = a2 / 1000; // 得到个位 String result = df.format(a3); double total = Double.parseDouble(result) + a1; return total + "公里"; } } // 时间转换 public static String timeFormatter(int minute) { if (minute < 60) { return minute + "分钟"; } else if (minute % 60 == 0) { return minute / 60 + "小时"; } else { int hour = minute / 60; int minute1 = minute % 60; return hour + "小时" + minute1 + "分钟"; } } public static int dp2px(Context context, int dp) { float scale = context.getResources().getDisplayMetrics().density; return (int) (dp * scale + 0.5f); } public static int px2dp(Context context, int px) { float scale = context.getResources().getDisplayMetrics().density; return (int) (px / scale + 0.5f); } public static int getScreenWidth(Context context) { WindowManager wm = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(outMetrics); return outMetrics.widthPixels; } public static void setSpannableStr(TextView textView, String str, int startIndex, int endIndex, float proporation) { SpannableString spannableString = new SpannableString(str); ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#393939")); spannableString.setSpan(colorSpan, startIndex, endIndex, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); RelativeSizeSpan sizeSpan01 = new RelativeSizeSpan(proporation); spannableString.setSpan(sizeSpan01, startIndex, endIndex, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); textView.setText(spannableString); } public static String getDateFromMillisecond(Long millisecond) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(millisecond); String dateStr = simpleDateFormat.format(date); return dateStr; } public static void acquireWakeLock(Context context) { if (null == mWakeLock) { PowerManager pm = (PowerManager) context .getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, ""); mWakeLock.setReferenceCounted(true); if (null != mWakeLock) { mWakeLock.acquire(); } } } // 释放设备电源锁 public static void releaseWakeLock() { if (null != mWakeLock) { mWakeLock.release(); mWakeLock = null; } } /** *判断当前应用程序处于前台还是后台 */ public static boolean isTopActivity(final Context context) { ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1); if (!tasks.isEmpty()) { ComponentName topActivity = tasks.get(0).topActivity; if (topActivity.getPackageName().equals(context.getPackageName())) { return true; } } return false; } public static boolean isServiceWork(Context mContext, String serviceName) { boolean isWork = false; ActivityManager myAM = (ActivityManager) mContext .getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningServiceInfo> myList = myAM.getRunningServices(1000); if (myList.size() <= 0) { return false; } int size = myList.size(); for (int i = 0; i < size; i++) { String mName = myList.get(i).service.getClassName().toString(); Log.d("yiwen","mName="+mName); if (mName.equals(serviceName)) { isWork = true; break; } } return isWork; } /** * 判断GPS是否开启,GPS或者AGPS开启一个就认为是开启的 * @param context * @return true 表示开启 */ public static final boolean isGpsOPen(final Context context) { LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); // 通过GPS卫星定位,定位级别可以精确到街(通过24颗卫星定位,在室外和空旷的地方定位准确、速度快) boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); // 通过WLAN或移动网络(3G/2G)确定的位置(也称作AGPS,辅助GPS定位。主要用于在室内或遮盖物(建筑群或茂密的深林等)密集的地方定位) boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); if (gps ) { return true; } return false; } /** * 强制帮用户打开GPS * @param context */ public static final void openGPS(Context context) { Intent GPSIntent = new Intent(); GPSIntent.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); GPSIntent.addCategory("android.intent.category.ALTERNATIVE"); GPSIntent.setData(Uri.parse("custom:3")); try { PendingIntent.getBroadcast(context, 0, GPSIntent, 0).send(); } catch (PendingIntent.CanceledException e) { e.printStackTrace(); } } public static void turnGPSOn(Context context) { Intent intent = new Intent("Android.location.GPS_ENABLED_CHANGE"); intent.putExtra("enabled", true); context.sendBroadcast(intent); String provider = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); if (!provider.contains("gps")) { //if gps is disabled final Intent poke = new Intent(); poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); poke.addCategory(Intent.CATEGORY_ALTERNATIVE); poke.setData(Uri.parse("3")); context.sendBroadcast(poke); } } public static void showDialog(Context context){ SelectDialog selectDialog = new SelectDialog(context, R.style.dialog);//创建Dialog并设置样式主题 Window win = selectDialog.getWindow(); WindowManager.LayoutParams params = new WindowManager.LayoutParams(); // params.x = -80;//设置x坐标 // params.y = -60;//设置y坐标 params.gravity = Gravity.CENTER; win.setAttributes(params); selectDialog.setCanceledOnTouchOutside(true);//设置点击Dialog外部任意区域关闭Dialog selectDialog.show(); } public static final String APP_BAIDU_MAP = "com.baidu.BaiduMap"; public static final String APP_AMAP = "com.autonavi.minimap"; /** * 检测是否有某个应用 * */ public static boolean hasApp(Context ctx, String packageName) { PackageManager manager = ctx.getPackageManager(); List<PackageInfo> apps = manager.getInstalledPackages(0); if (apps != null) { for (int i = 0; i < apps.size(); i++) { if (apps.get(i).packageName.equals(packageName)) { return true; } } } return false; } }