Java tutorial
/* * Copyright (C) 2010 mAPPn.Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.appassit.common; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.lang.ref.WeakReference; import java.lang.reflect.Method; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Dictionary; import java.util.Hashtable; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.ParseException; import org.apache.http.util.EntityUtils; import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityManager.MemoryInfo; import android.app.ActivityManager.RunningAppProcessInfo; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.http.AndroidHttpClient; import android.os.Environment; import android.text.TextUtils; import android.util.DisplayMetrics; import android.util.Log; import android.view.Display; import android.view.View; import android.view.WindowManager; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.LayoutAnimationController; import android.view.animation.TranslateAnimation; import android.widget.AbsListView; import android.widget.ListView; import com.appassit.activitys.SLAppication; public class Utils { public static boolean sDebug; public static String sLogTag; private static final String TAG = "Utils"; // UTF-8 encoding private static final String ENCODING_UTF8 = "UTF-8"; private static WeakReference<Calendar> calendar; private static Dictionary<Integer, Integer> sListViewItemHeights = new Hashtable<Integer, Integer>(); /** * <p> * Get UTF8 bytes from a string * </p> * * @param string * String * @return UTF8 byte array, or null if failed to get UTF8 byte array */ public static byte[] getUTF8Bytes(String string) { if (string == null) return new byte[0]; try { return string.getBytes(ENCODING_UTF8); } catch (UnsupportedEncodingException e) { /* * If system doesn't support UTF-8, use another way */ try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(bos); dos.writeUTF(string); byte[] jdata = bos.toByteArray(); bos.close(); dos.close(); byte[] buff = new byte[jdata.length - 2]; System.arraycopy(jdata, 2, buff, 0, buff.length); return buff; } catch (IOException ex) { return new byte[0]; } } } /** * <p> * Get string in UTF-8 encoding * </p> * * @param b * byte array * @return string in utf-8 encoding, or empty if the byte array is not encoded with UTF-8 */ public static String getUTF8String(byte[] b) { if (b == null) return ""; return getUTF8String(b, 0, b.length); } /** * <p> * Get string in UTF-8 encoding * </p> */ public static String getUTF8String(byte[] b, int start, int length) { if (b == null) { return ""; } else { try { return new String(b, start, length, ENCODING_UTF8); } catch (UnsupportedEncodingException e) { return ""; } } } /** * <p> * Parse int value from string * </p> * * @param value * string * @return int value */ public static int getInt(String value) { if (TextUtils.isEmpty(value)) { return 0; } try { return Integer.parseInt(value.trim(), 10); } catch (NumberFormatException e) { return 0; } } /** * <p> * Parse float value from string * </p> * * @param value * string * @return float value */ public static float getFloat(String value) { if (value == null) return 0f; try { return Float.parseFloat(value.trim()); } catch (NumberFormatException e) { return 0f; } } /** * <p> * Parse long value from string * </p> * * @param value * string * @return long value */ public static long getLong(String value) { if (value == null) return 0L; try { return Long.parseLong(value.trim()); } catch (NumberFormatException e) { return 0L; } } public static void V(String msg) { if (sDebug) { Log.v(sLogTag, msg); } } public static void V(String msg, Throwable e) { if (sDebug) { Log.v(sLogTag, msg, e); } } public static void D(String msg) { if (sDebug) { Log.d(sLogTag, msg); } } public static void D(String msg, Throwable e) { if (sDebug) { Log.d(sLogTag, msg, e); } } public static void I(String msg) { if (sDebug) { Log.i(sLogTag, msg); } } public static void I(String msg, Throwable e) { if (sDebug) { Log.i(sLogTag, msg, e); } } public static void W(String msg) { if (sDebug) { Log.w(sLogTag, msg); } } public static void W(String msg, Throwable e) { if (sDebug) { Log.w(sLogTag, msg, e); } } public static void E(String msg) { if (sDebug) { Log.e(sLogTag, msg); } } public static void E(String msg, Throwable e) { if (sDebug) { Log.e(sLogTag, msg, e); } } public static String formatDate(long time) { if (calendar == null || calendar.get() == null) { calendar = new WeakReference<Calendar>(Calendar.getInstance()); } Calendar target = calendar.get(); target.setTimeInMillis(time); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.format(target.getTime()); } public static String getTodayDate() { if (calendar == null || calendar.get() == null) { calendar = new WeakReference<Calendar>(Calendar.getInstance()); } Calendar today = calendar.get(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.format(today.getTime()); } /** * Returns whether the network is available */ public static boolean isNetworkAvailable(Context context) { ConnectivityManager connectivity = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity == null) { Log.w(TAG, "couldn't get connectivity manager"); } else { NetworkInfo[] info = connectivity.getAllNetworkInfo(); if (info != null) { for (int i = 0, length = info.length; i < length; i++) { if (info[i].getState() == NetworkInfo.State.CONNECTED) { return true; } } } } return false; } /** * Returns whether the network is roaming */ public static boolean isNetworkRoaming(Context context) { ConnectivityManager connectivity = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity == null) { // Log.w(Constants.TAG, "couldn't get connectivity manager"); } else { NetworkInfo info = connectivity.getActiveNetworkInfo(); if (info != null && info.getType() == ConnectivityManager.TYPE_MOBILE) { } else { } } return false; } /** * ?Formatyyyy-MM-dd HH:mm * * @param timeInMillis * @return */ public static String formatTime(long timeInMillis) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); return sdf.format(new Date(timeInMillis)); } /** * ? * * @param src * ? * @param dst * * @throws IOException */ public static void copyFile(InputStream in, FileOutputStream dst) throws IOException { byte[] buffer = new byte[8192]; int len = 0; while ((len = in.read(buffer)) > 0) { dst.write(buffer, 0, len); } in.close(); dst.close(); } /** * ?HTTP String Entity * * @param response * HTTP Response * @return API?(String) */ public static String getStringResponse(HttpResponse response) { HttpEntity entity = response.getEntity(); try { return entity == null ? null : EntityUtils.toString(response.getEntity()); } catch (ParseException e) { D("getStringResponse meet ParseException", e); } catch (IOException e) { D("getStringResponse meet IOException", e); } return null; } /** * ?HTTP InputStream Entity * * @param response * HTTP Response * @return API?(InputStream) */ public static InputStream getInputStreamResponse(HttpResponse response) { HttpEntity entity = response.getEntity(); try { if (entity == null) return null; return AndroidHttpClient.getUngzippedContent(entity); } catch (IllegalStateException e) { D("getInputStreamResponse meet IllegalStateException", e); } catch (IOException e) { D("getInputStreamResponse meet IOException", e); } return null; } /** * ?? * * @return */ public static LayoutAnimationController getLayoutAnimation() { AnimationSet set = new AnimationSet(true); Animation animation = new AlphaAnimation(0.0f, 1.0f); animation.setDuration(50); set.addAnimation(animation); animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, -1.0f, Animation.RELATIVE_TO_SELF, 0.0f); animation.setDuration(100); set.addAnimation(animation); LayoutAnimationController controller = new LayoutAnimationController(set, 0.5f); return controller; } /** * Check whether the SD card is readable */ public static boolean isSdcardReadable() { final String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state) || Environment.MEDIA_MOUNTED.equals(state)) { return true; } return false; } /** * Check whether the SD card is writable */ public static boolean isSdcardWritable() { final String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { return true; } return false; } public static float sp2px(Context context, float sp) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); DisplayMetrics displaymetrics = new DisplayMetrics(); display.getMetrics(displaymetrics); final float scale = displaymetrics.scaledDensity; return sp * scale; } public static int dp2px(Context context, int dp) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); DisplayMetrics displaymetrics = new DisplayMetrics(); display.getMetrics(displaymetrics); return (int) (dp * displaymetrics.density + 0.5f); } public static int px2dp(Context context, int px) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); DisplayMetrics displaymetrics = new DisplayMetrics(); display.getMetrics(displaymetrics); return (int) (px / displaymetrics.density + 0.5f); } public static int getScrollY(ListView lv) { View c = lv.getChildAt(0); if (c == null) { return 0; } int firstVisiblePosition = lv.getFirstVisiblePosition(); int top = c.getTop(); int scrollY = -top + firstVisiblePosition * c.getHeight(); return scrollY; } public static int getScrollY(AbsListView lv) { View c = lv.getChildAt(0); if (c == null) { return 0; } int firstVisiblePosition = lv.getFirstVisiblePosition(); int scrollY = -(c.getTop()); // int scrollY = 0; sListViewItemHeights.put(lv.getFirstVisiblePosition(), c.getHeight()); // if(scrollY>0) // Log.d("QuickReturnUtils", "getScrollY() : -(c.getTop()) - "+ -(c.getTop())); // else // Log.i("QuickReturnUtils", "getScrollY() : -(c.getTop()) - "+ -(c.getTop())); if (scrollY < 0) scrollY = 0; for (int i = 0; i < firstVisiblePosition; ++i) { // Log.d("QuickReturnUtils", "getScrollY() : i - "+i); // Log.d("QuickReturnUtils", "getScrollY() : sListViewItemHeights.get(i) - "+sListViewItemHeights.get(i)); if (sListViewItemHeights.get(i) != null) // (this is a sanity check) scrollY += sListViewItemHeights.get(i); // add all heights of the views that are gone } // Log.d("QuickReturnUtils", "getScrollY() : scrollY - "+scrollY); return scrollY; } /** * Convert a translucent themed Activity {@link android.R.attr#windowIsTranslucent} to a fullscreen opaque Activity. * <p> * Call this whenever the background of a translucent Activity has changed to become opaque. Doing so will allow the {@link android.view.Surface} of the Activity behind to be released. * <p> * This call has no effect on non-translucent activities or on activities with the {@link android.R.attr#windowIsFloating} attribute. */ public static void convertActivityFromTranslucent(Activity activity) { try { Method method = Activity.class.getDeclaredMethod("convertFromTranslucent"); method.setAccessible(true); method.invoke(activity); } catch (Throwable t) { } } /** * Convert a translucent themed Activity {@link android.R.attr#windowIsTranslucent} back from opaque to translucent following a call to {@link #convertActivityFromTranslucent(android.app.Activity)} . * <p> * Calling this allows the Activity behind this one to be seen again. Once all such Activities have been redrawn * <p> * This call has no effect on non-translucent activities or on activities with the {@link android.R.attr#windowIsFloating} attribute. */ public static void convertActivityToTranslucent(Activity activity) { try { Class<?>[] classes = Activity.class.getDeclaredClasses(); Class<?> translucentConversionListenerClazz = null; for (Class clazz : classes) { if (clazz.getSimpleName().contains("TranslucentConversionListener")) { translucentConversionListenerClazz = clazz; } } Method method = Activity.class.getDeclaredMethod("convertToTranslucent", translucentConversionListenerClazz); method.setAccessible(true); method.invoke(activity, new Object[] { null }); } catch (Throwable t) { } } /* * ?android??? */ public static long getAvailMemory() { ActivityManager am = (ActivityManager) SLAppication.getContext().getSystemService(Context.ACTIVITY_SERVICE); MemoryInfo mi = new MemoryInfo(); am.getMemoryInfo(mi); // mi.availMem; ?? return mi.availMem;// ?? } public static long getTotalMemory() { 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+"); for (String num : arrayOfString) { Log.i(str2, num + "\t"); } initial_memory = Integer.valueOf(arrayOfString[1]).intValue() * 1024;// ??KB1024?Byte localBufferedReader.close(); } catch (IOException e) { } return initial_memory;// Byte?KBMB? } public static void clearBackMemory() { ActivityManager activityManager = (ActivityManager) SLAppication.getContext() .getSystemService(Context.ACTIVITY_SERVICE); int currentProcessId = android.os.Process.myPid(); RunningAppProcessInfo runningAppProcessInfo = null; List<RunningAppProcessInfo> runningAppProcessInfos = activityManager.getRunningAppProcesses(); if (runningAppProcessInfos != null) { for (int i = 0; i < runningAppProcessInfos.size(); ++i) { runningAppProcessInfo = runningAppProcessInfos.get(i); // RunningAppProcessInfo.IMPORTANCE_SERVICE // ? // RunningAppProcessInfo.IMPORTANCE_VISIBLE // ???,???? if (runningAppProcessInfo.importance > RunningAppProcessInfo.IMPORTANCE_VISIBLE && runningAppProcessInfo.pid != currentProcessId) { String[] pkgList = runningAppProcessInfo.pkgList; for (int j = 0; j < pkgList.length; ++j) { activityManager.killBackgroundProcesses(pkgList[j]); // count++; } } } } } }