package com.sina.sinavideo.coreplayer.util; import java.io.File; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.Enumeration; import java.util.List; import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityManager.RunningAppProcessInfo; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager.NameNotFoundException; import android.media.AudioManager; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.NetworkInfo.State; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Build; import android.os.Environment; import android.os.StatFs; import android.provider.Settings; import android.provider.Settings.SettingNotFoundException; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.view.WindowManager; public class AndroidUtil { private static final String TAG = "AndroidUtil"; /** 剩余空间 **/ private static final long SURPLUS_AVAIL_SIZE = 100 * 1024 * 1024;// 100M public static final long MIN_PLAYSDK_SOTROAGRE_SIZE = 30 * 1000 * 1000; /** * 获取本地Ip地址 * * @param context * @return */ public static String getLocalIpAddress(Context context) { WifiManager wifiManager = (WifiManager) context .getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); if (wifiInfo != null && wifiInfo.getIpAddress() != 0) { return android.text.format.Formatter.formatIpAddress(wifiInfo .getIpAddress()); } else { try { Enumeration<NetworkInterface> en = NetworkInterface .getNetworkInterfaces(); while (en.hasMoreElements()) { NetworkInterface intf = en.nextElement(); Enumeration<InetAddress> enumIpAddr = intf .getInetAddresses(); while (enumIpAddr.hasMoreElements()) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress() && inetAddress.getHostAddress().indexOf(":") == -1) { String ipAddress = inetAddress.getHostAddress(); if (!TextUtils.isEmpty(ipAddress) && !ipAddress.contains(":")) { return ipAddress; } } } } } catch (SocketException e) { e.printStackTrace(); } } return null; } /** * Cmwap网络是否已连接 * * @param context * @return */ public static boolean isNetworkConnectedByCmwap(Context context) { NetworkInfo networkInfo = ((ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE)) .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); return networkInfo != null && networkInfo.isConnected() && networkInfo.getExtraInfo() != null && networkInfo.getExtraInfo().toLowerCase().contains("cmwap"); } /** * 连接的是否是2G网络 * * @param context * @return */ public static boolean isNetworkConnectedBy2G(Context context) { NetworkInfo networkInfo = ((ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE)) .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); if (networkInfo != null && networkInfo.isConnected()) { int subtype = networkInfo.getSubtype(); if (subtype == TelephonyManager.NETWORK_TYPE_GPRS || subtype == TelephonyManager.NETWORK_TYPE_EDGE || subtype == TelephonyManager.NETWORK_TYPE_CDMA) {// 移动和联通2G return true; } } return false; } /** * 连接的是否是3G网络 * * @param context * @return */ public static boolean isNetworkConnectedBy3G(Context context) { NetworkInfo networkInfo = ((ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE)) .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); if (networkInfo != null && networkInfo.isConnected()) { int subtype = networkInfo.getSubtype(); if (subtype == TelephonyManager.NETWORK_TYPE_EVDO_A || subtype == TelephonyManager.NETWORK_TYPE_EVDO_0 || subtype == TelephonyManager.NETWORK_TYPE_UMTS || subtype == TelephonyManager.NETWORK_TYPE_HSPA) {// 电信或联通3G return true; } } return false; } /** * Wifi网络是否已连接 * * @param context * @return */ public static boolean isNetworkConnectedByWifi(Context context) { NetworkInfo networkInfo = ((ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE)) .getNetworkInfo(ConnectivityManager.TYPE_WIFI); return networkInfo != null && networkInfo.isConnected(); } /** * 网络是否已连接 * * @param context * @return */ public static boolean isNetworkConnected(Context context) { try { NetworkInfo networkInfo = ((ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE)) .getActiveNetworkInfo(); return networkInfo != null && networkInfo.isConnected(); } catch (NullPointerException e) { e.printStackTrace(); return false; } } /** * 是否开启飞行模式 * * @param context * @return */ public static boolean isAirplaneModeOn(Context context) { return Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) != 0; } /** * 获取当前屏幕亮度,范围0-255 * * @param context * @return 屏幕当前亮度值 */ public static int getScreenBrightness(Context context) { int rightnessValue = 0; try { rightnessValue = Settings.System.getInt( context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS); } catch (SettingNotFoundException e) { e.printStackTrace(); } return rightnessValue; } /** * 设置屏幕亮度(0-255) * * @param activity * @param screenBrightness */ public static void setScreenBrightness(Activity activity, float screenBrightness) { WindowManager.LayoutParams lp = activity.getWindow().getAttributes(); lp.screenBrightness = screenBrightness / 255f; activity.getWindow().setAttributes(lp); } /** * 判断是否开启了自动亮度调节 * * @param context * @return */ public static boolean isAutomicBrightness(Context context) { boolean automicBrightness = false; try { automicBrightness = Settings.System.getInt( context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC; } catch (SettingNotFoundException e) { e.printStackTrace(); } return automicBrightness; } /** * 开启亮度自动调节 * * @param context */ public static void startAutoBrightness(Context context) { Settings.System.putInt(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC); } /** * 停止自动亮度调节 * * @param context */ public static void stopAutoBrightness(Context context) { Settings.System.putInt(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL); } /** * 跳转系统网络设置界面 * * @param context */ public static boolean startActivitySettingWireless(Context context) { Intent intent = new Intent(); if (Build.VERSION.SDK_INT < 14) { intent.setAction(Settings.ACTION_WIRELESS_SETTINGS); } else { intent.setAction(Settings.ACTION_SETTINGS); } try { context.startActivity(intent); return true; } catch (ActivityNotFoundException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } return false; } /** * 调整程序声音类型为媒体播放声音,并且与媒体播放声音大小一致 * * @param context */ public static void adjustVoiceToSystemSame(Context context) { AudioManager audioManager = (AudioManager) context .getSystemService(Context.AUDIO_SERVICE); audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_SAME, 0); } /** * sdcard是否可读写 * * @return */ public static boolean isSdcardReady() { try { return Environment.MEDIA_MOUNTED.equals(Environment .getExternalStorageState()); } catch (Exception e) { LogS.e(TAG, "isSdcardReady had exception!", e); return false; } } public static boolean isSdcardAvailable(int fileSize) { if (isSdcardReady()) { File sdcardDir = Environment.getExternalStorageDirectory(); StatFs sf = new StatFs(sdcardDir.getPath()); long availCount = sf.getAvailableBlocks(); long blockSize = sf.getBlockSize(); long availSize = availCount * blockSize; if (availSize - SURPLUS_AVAIL_SIZE >= fileSize) { return true; } else { return false; } } return false; } /** * 获取文件系统的剩余空间,单位:KB * * @return */ public static long getFileSystemAvailableSize(File dirName) { long availableSize = -1; if (dirName != null && dirName.exists()) { StatFs sf = new StatFs(dirName.getPath()); long blockSize = sf.getBlockSize(); long blockCount = sf.getBlockCount(); long availableBlocks = sf.getAvailableBlocks(); availableSize = availableBlocks * blockSize / 1024; LogS.d(TAG, "blockSize = " + blockSize + ", blockCount = " + blockCount + ", totalSize = " + blockSize * blockCount / 1024 + " KB" + "\navailableBlocks = " + availableBlocks + ", availableSize = " + availableSize + " KB"); } return availableSize; } /** * 获取Context所在进程的名称 * * @param context * @return */ public static String getProcessName(Context context) { int pid = android.os.Process.myPid(); ActivityManager mActivityManager = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); for (RunningAppProcessInfo appProcess : mActivityManager .getRunningAppProcesses()) { if (appProcess.pid == pid) { return appProcess.processName; } } return null; } /** * 应用是否已经安装 * * @param context * @param packageName * @return */ public static boolean isAppInstalled(Context context, String packageName) { try { // mContext.getPackageInfo(String packageName, int // flags)第二个参数flags为0:因为不需要该程序的其他信息,只需返回程序的基本信息。 return context.getPackageManager().getPackageInfo(packageName, 0) != null; } catch (NameNotFoundException e) { } return false; } /** * 网络是否手机网络连接 * * @param context * @return */ public static boolean isOnlyMobileType(Context context) { State wifiState = null; State mobileState = null; ConnectivityManager cm = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = null; try { networkInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI); } catch (Exception e) { e.printStackTrace(); } if (networkInfo != null) { wifiState = networkInfo.getState(); } try { networkInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); } catch (Exception e) { e.printStackTrace(); } if (networkInfo != null) { mobileState = networkInfo.getState(); } LogS.d("zhang", "onReceive -- wifiState = " + wifiState + " -- mobileState = " + mobileState); if (wifiState != null && mobileState != null && State.CONNECTED != wifiState && State.CONNECTED == mobileState) { // 手机网络连接成功 LogS.d("zhang", "onReceive -- 手机网络连接成功"); return true; } return false; } /** * 程序是否在前台运行 * * @return */ public static boolean isAppOnForeground(Context context) { try { ActivityManager activityManager = (ActivityManager) context .getApplicationContext().getSystemService( Context.ACTIVITY_SERVICE); String packageName = context.getPackageName(); List<RunningAppProcessInfo> appProcesses = activityManager .getRunningAppProcesses(); if (appProcesses == null) { return false; } for (RunningAppProcessInfo appProcess : appProcesses) { // The name of the process that this object is associated with. if (appProcess.processName.equals(packageName) && appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { return true; } } } catch (Exception e) { e.printStackTrace(); LogS.e(TAG, "isAppOnForeground exception!", e); } return false; } public static long getAvailableInternalRomSize() { File path = Environment.getDataDirectory(); StatFs stat = new StatFs(path.getPath()); long blockSize = stat.getBlockSize(); long totalBlocks = stat.getBlockCount(); long availBlocks = stat.getAvailableBlocks(); return availBlocks * blockSize; } private static String mTempString = null; public static String numToChina(int num) { int size = (num + "").length(); if (size == 1) { mTempString = arabNumtoChinese(num); } else if (size == 2) { if (num / 10 == 1) { mTempString = "十"; } else { mTempString = arabNumtoChinese(num / 10) + "十"; } if (num % 10 != 0) { mTempString += arabNumtoChinese(num % 10); } } else if (size == 3) { mTempString = arabNumtoChinese(num / 100) + "百"; if (num % 100 != 0) { int num1 = num % 100; int num2 = num1 / 10; mTempString += arabNumtoChinese(num1 / 10); if (num2 != 0) { mTempString += "十"; } if (num % 10 != 0) { mTempString += arabNumtoChinese(num1 % 10); } } } return mTempString; } private static String arabNumtoChinese(int a) { StringBuffer sb = new StringBuffer(); String[] str = new String[] { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" }; return sb.append(str[a]).toString(); } /** * 判断是否是本地url * * @return */ public static boolean isLocalUrl(String url) { File file = Environment.getExternalStorageDirectory(); if (AndroidUtil.isSdcardReady() && file != null && url.startsWith(file.getAbsolutePath())) { return true; } if (url.startsWith("http")) return false; return false; } }