Android中Helper幫助類
package com.huaiye.ecs.common.utils; import android.app.Activity; import android.app.ActivityManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager;import android.content.pm.Signature; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.net.ConnectivityManager; import android.net.NetworkInfo; importandroid.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Build; import android.os.Environment; import android.os.PowerManager; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.view.View; import android.view.animation.Animation; importandroid.view.animation.AnimationUtils; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.LineNumberReader; import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.util.Enumeration; import java.util.List; import java.util.UUID; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; /** * ****************************** * @檔名稱:KukiHelper.java * @檔案作者:Administrator * @建立時間:2015年7月4日 * @檔案描述:ccc * ***************************** */ public class Helper { static Context context = App.getInstance(); private Helper() { } // sp convert to px public static int sp2px(int spValue) { float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity; int pxValue = (int) (spValue * scaledDensity + 0.5f); return pxValue; } // px convert to sp public static int px2sp(int pxValue) { float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity; int spValue = (int) (pxValue / scaledDensity + 0.5f); return spValue; } // dp convert to px public static int dp2px(int dpValue) { float density = context.getResources().getDisplayMetrics().density; int pxValue = (int) (dpValue * density + 0.5f); return pxValue; } // px convert to dp public static int px2dp(int pxValue) { float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity; int dpValue = (int) (pxValue * scaledDensity + 0.5f); return dpValue; } // findView public static <T extends View> T findViewById(View rootView, int id) { View target = rootView.findViewById(id); return (T) target; } // findView public static <T extends View> T findViewById(Activity ac, int id) { View target = ac.findViewById(id); return (T) target; } // 獲取包名 public static String packageName() { String name = context.getPackageName(); return name; } // 獲取版本號 public static int versionCode() { int version = -1; try { String packageName = packageName(); PackageManager packageManager = context.getPackageManager(); PackageInfo packageInfo = packageManager.getPackageInfo(packageName, 0); version = packageInfo.versionCode; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return version; } // 獲取版本名稱 public static String versionName() { String versionCode = null; try { String packageName = packageName(); PackageManager packageManager = context.getPackageManager(); PackageInfo packageInfo = packageManager.getPackageInfo(packageName, 0); versionCode = packageInfo.versionName; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return versionCode; } // 獲取xml中配置的String 值 public static String getStringResource(int id) { return context.getResources().getString(id); } // 獲取xml中的Color 色值 public static int getColorResource(int id) { return context.getResources().getColor(id); } // 獲取xml中的Integer 值 public static int getIntegerResource(int id) { return context.getResources().getInteger(id); } // 獲取xml中的String陣列 public static String[] getStringArrayResource(int id) { return context.getResources().getStringArray(id); } // 獲取Assets下的資源輸入流 public static InputStream getAssetsResource(String filename) { try { return context.getAssets().open(filename); } catch (IOException e) { e.printStackTrace(); } return null; } // 獲取Assets下的String資源 public static String getAssetString(String name) { String string = ""; AssetManager asset = context.getAssets(); try { InputStream input = asset.open(name); byte[] buffer = new byte[input.available()]; input.read(buffer); input.close(); string = new String(buffer, "utf-8"); } catch (IOException e) { e.printStackTrace(); } return string; } // 獲取assets下的Bitmap檔案 public static Bitmap getAssetBitmap(String name) { InputStream is = getAssetsResource(name); if (is != null) { Bitmap bm = BitmapFactory.decodeStream(is); return bm; } return null; } // 獲取Raw下的資源輸入流 public static InputStream getRawResource(int id) { return context.getResources().openRawResource(id); } // 獲取xml中的Integer陣列 public static int[] getIntegerArrayResource(int id) { return context.getResources().getIntArray(id); } // 獲取Drawable public static Drawable getDrawable(int id) { return context.getResources().getDrawable(id); } // 獲取Animations public static Animation getAnimation(int id) { return AnimationUtils.loadAnimation(context, id); } // 視窗寬度 public static int getScreenWidth() { return context.getResources().getDisplayMetrics().widthPixels; } // 視窗高度 public static int getScreenHeight() { return context.getResources().getDisplayMetrics().heightPixels; } // IMEI public static String getIMEI() { String imei = ((TelephonyManager) context .getApplicationContext() .getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId(); return imei; } // IMSI public static String getIMSI() { String imsi = ((TelephonyManager) context.getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE)).getSubscriberId(); return imsi; } public static String getDeviceUniqueId(){ String serial = null; String m_szDevIDShort = "35" + Build.BOARD.length()%10+ Build.BRAND.length()%10 + Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 + Build.DISPLAY.length()%10 + Build.HOST.length()%10 + Build.ID.length()%10 + Build.MANUFACTURER.length()%10 + Build.MODEL.length()%10 + Build.PRODUCT.length()%10 + Build.TAGS.length()%10 + Build.TYPE.length()%10 + Build.USER.length()%10 ; //13 位 try { serial = Build.class.getField("SERIAL").get(null).toString(); //API>=9 使用serial號 return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString(); } catch (Exception exception) { //serial需要一個初始化 serial = "serial"; // 隨便一個初始化 } //使用硬體資訊拼湊出來的15位號碼 return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString(); } // 裝置型號 public static String getModel() { return Build.MODEL; } // 裝置製造商 public static String getManufacturer() { return Build.MANUFACTURER; } /** * 獲得狀態列的高度 */ public static int getStatusHeight() { int statusHeight = -1; try { Class<?> clazz = Class.forName("com.android.internal.R$dimen"); Object object = clazz.newInstance(); int height = Integer.parseInt(clazz.getField("status_bar_height") .get(object).toString()); statusHeight = context.getResources().getDimensionPixelSize(height); } catch (Exception e) { e.printStackTrace(); } return statusHeight; } /** * 獲取當前螢幕截圖,包含狀態列 */ public static Bitmap snapShotWithStatusBar(Activity activity) { View view = activity.getWindow().getDecorView(); view.setDrawingCacheEnabled(true); view.buildDrawingCache(); Bitmap bmp = view.getDrawingCache(); int width = getScreenWidth(); int height = getScreenHeight(); Bitmap bp = null; bp = Bitmap.createBitmap(bmp, 0, 0, width, height); view.destroyDrawingCache(); return bp; } /** * 獲取狀態列高度 * * @return */ public static int statusHeight(Activity activity) { Rect frame = new Rect(); activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); int statusBarHeight = frame.top; return statusBarHeight; } /** * 獲取當前螢幕截圖,不包含狀態列 */ public static Bitmap snapShotWithoutStatusBar(Activity activity) { View view = activity.getWindow().getDecorView(); view.setDrawingCacheEnabled(true); view.buildDrawingCache(); Bitmap bmp = view.getDrawingCache(); Rect frame = new Rect(); activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); int statusBarHeight = frame.top; int width = getScreenWidth(); int height = getScreenHeight(); Bitmap bp = null; bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height - statusBarHeight); view.destroyDrawingCache(); return bp; } // 系統版本名 public static String getOsReleaseVersion() { return Build.VERSION.RELEASE; } // 系統SDK版本 public static int getOsSdkVersion() { return Build.VERSION.SDK_INT; } // 獲取 uuid public static String getUUid() { String uuidString = UUID.randomUUID().toString(); return uuidString; } // Application <meta-data> 元素 key為name 獲取對應的value public static <T> T getAppMetaData(String name) { ApplicationInfo appInfo; try { appInfo = context.getPackageManager().getApplicationInfo( context.getPackageName(), PackageManager.GET_META_DATA); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); return null; } if (appInfo.metaData != null && appInfo.metaData.containsKey(name)) { return (T) appInfo.metaData.get(name); } return null; } /** * 獲取系統安裝的所有App的包資訊 * @return */ public static List<PackageInfo> getInstalledPackages(){ PackageManager pm = context.getPackageManager(); return pm.getInstalledPackages(0); } /** * 判斷App是否是系統安裝的 * @param pi * @return */ public static boolean isAppSystemInstalled(PackageInfo pi){ if((pi.applicationInfo.flags& ApplicationInfo.FLAG_SYSTEM)==0&& (pi.applicationInfo.flags&ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)==0){ return false; }else { return true; } } /** * 獲取應用程式名稱 */ public static String getAppName() { // 第一種方案 // try { // PackageManager packageManager = context.getPackageManager(); // PackageInfo packageInfo = packageManager.getPackageInfo( // context.getPackageName(), 0); // int labelRes = packageInfo.applicationInfo.labelRes; // return context.getResources().getString(labelRes); // } catch (PackageManager.NameNotFoundException e) { // e.printStackTrace(); // } PackageManager packageManager = context.getPackageManager(); return packageManager.getApplicationLabel(context.getApplicationInfo()).toString(); } // 一個獲得當前程序的名字的方法 public static String getCurrentProcessName() { int pid = android.os.Process.myPid(); ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); for (ActivityManager.RunningAppProcessInfo appProcess : activityManager.getRunningAppProcesses()) { if (appProcess.pid == pid) { return appProcess.processName; } } return null; } /** * 使用SSL不信任的證書 * 預設設定的是HttpsURLConnection的 */ public static void useUntrustedCertificate() { // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted( X509Certificate[] certs, String authType) { } public void checkServerTrusted( X509Certificate[] certs, String authType) { } } }; // Install the all-trusting trust manager try { SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); } catch (Exception e) { e.printStackTrace(); } } /** * 開啟軟鍵盤 */ public static void openKeyboard(EditText mEditText) { InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(mEditText, InputMethodManager.RESULT_SHOWN); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); } /** * 關閉軟鍵盤 */ public static void closeKeyboard(EditText mEditText) { InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0); } // mac地址 // 需要許可權 ACCESS_WIFI_STATE public static String getLocalMacAddress() { String macSerial = null; String str = ""; try { Process pp = Runtime.getRuntime().exec("cat /sys/class/net/wlan0/address "); InputStreamReader ir = new InputStreamReader(pp.getInputStream()); LineNumberReader input = new LineNumberReader(ir); for (; null != str; ) { str = input.readLine(); if (str != null) { macSerial = str.trim();// 去空格 break; } } } catch (IOException ex) { // 賦予預設值 ex.printStackTrace(); } if(TextUtils.isEmpty(macSerial)){ macSerial = ((TelephonyManager) context .getApplicationContext() .getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId(); } if(TextUtils.isEmpty(macSerial)){ String serial = null; String m_szDevIDShort = "35" + Build.BOARD.length()%10+ Build.BRAND.length()%10 + Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 + Build.DISPLAY.length()%10 + Build.HOST.length()%10 + Build.ID.length()%10 + Build.MANUFACTURER.length()%10 + Build.MODEL.length()%10 + Build.PRODUCT.length()%10 + Build.TAGS.length()%10 + Build.TYPE.length()%10 + Build.USER.length()%10 ; //13 位 try { serial = android.os.Build.class.getField("SERIAL").get(null).toString(); //API>=9 使用serial號 return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString(); } catch (Exception exception) { //serial需要一個初始化 serial = "serial"; // 隨便一個初始化 } //使用硬體資訊拼湊出來的15位號碼 macSerial = new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString(); } return macSerial; } /** * sdcard是否可用 * * @return */ public static boolean isSDCardUseful() { return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); } /** * 當前App是否處於前臺 * 在onResume/onStop中判斷 * onStop是Activity回到後臺後的最後一個生命週期方法 * * @return */ public static boolean isAppForeground() { // 方法的原型 // ActivityManager activityManager = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE); // String packageName = getApplicationContext().getPackageName(); // // List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager // .getRunningAppProcesses(); // if (appProcesses == null) // return false; // // for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) { // // 程序名稱是否與包名一致 // // 這種方法判斷有誤差,如果App啟動的所線上程是一個附屬執行緒,在附屬執行緒中判斷的話,程序名永遠都會與包名一致 // if (appProcess.processName.equals(packageName) // && appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { // return true; // } // } // 廢棄方法+ // /** // * android.permission.GET_TASKS // * 之前,使用該介面需要 android.permission.GET_TASKS // * 即使是自己開發的普通應用,只要宣告該許可權,即可以使用getRunningTasks介面。 // * 但從L開始,這種方式以及廢棄。 // * 應用要使用該介面必須宣告許可權android.permission.REAL_GET_TASKS // * 而這個許可權是不對三方應用開放的。(在Manifest裡申請了也沒有作用) // * 系統應用(有系統簽名)可以呼叫該許可權。 // * 該方法廢棄 // */ // ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); // List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1); // if (tasks != null && !tasks.isEmpty()) { // ActivityManager.RunningTaskInfo topTask = tasks.get(0); // ComponentName topTaskInfo = topTask.topActivity; // Log.d("hjq", "top pkg " + topTaskInfo.getPackageName()); // if (topTaskInfo.getPackageName().equals(context.getPackageName())) { // return true; // } // } // 獲取當前的程序號 int pid = android.os.Process.myPid(); ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> processInfos = am.getRunningAppProcesses(); if (processInfos != null && !processInfos.isEmpty()) { for (ActivityManager.RunningAppProcessInfo tmp : processInfos) { if (tmp.pid == pid) { // 判斷該程序是否屬於前臺程序 if (tmp.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { return true; } else { return false; } } } } return false; } /** * 判斷螢幕是否被點亮 * @return */ public static boolean isScreenOn(){ PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); boolean isScreenOn = pm.isScreenOn(); return isScreenOn; } /** * 重新啟動App * * @param context */ public static void restartApplication(Context context) { PackageManager pm = context.getPackageManager(); Intent intent = pm.getLaunchIntentForPackage(context.getPackageName()); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); context.startActivity(intent); } /** * 網路相關的工具方法 */ public static class NetWork { /** * 判斷網路是否可用 * * @return */ public static boolean isNetworkAvailable() { /* * mNetworkInfo.isAvailable() mNetworkInfo.isConnected() 函式返回 * 1,顯示連線已儲存,但標題欄沒有,即沒有實質連線上 not connect, available * * 2,顯示連線已儲存,標題欄也有已連線上的圖示, connect, available * * 3,選擇不儲存後 not connect,相關推薦
Android中Helper幫助類
package com.huaiye.ecs.common.utils; import android.app.Activity; import android.app.ActivityManager; import android.content.ComponentNam
Android中實現「類方法指令抽取方式」加固方案原理解析
一、前言Android中加固方案一直在進步,因為新的加固方案出來就會被人無情的破解脫殼了,從第一代加固方案落地加密dex檔案,第二代加固方案不落地加密dex檔案,在到第三代加固方案類方法抽取,以後後面的
Android中Intent傳遞類物件的方法一(Serializable)
Activity之間通過Intent傳遞值,支援基本資料型別和String物件及它們的陣列物件byte、byte[]、char、char[]、boolean、boolean[]、short、short[]、int、int[]、long、long[]、float、
Android中的抽象類和介面實踐
1.關於抽象類 說到抽象類,那必定要提到抽象方法,抽象方法是指在類中沒有方法體的方法,而抽象類中的抽象方法必須被子類實現。含有抽象方法的類就叫抽象類,那如果一個抽象類不含有抽象方法可以嗎?答案是可以,但是這就失去了抽象類本身的用處和意義了,因為抽象方法就是為了
Android 中的DisplayMetrics類的用法
Android 可設定為隨著視窗大小調整縮放比例,但即便如此,手機程式設計人員還是必須知道手機螢幕的邊界,以避免縮放造成的佈局變形問題。 手機的解析度資訊是手機的一項重要資訊,很好的是,Android 已經提供DisplayMetircs 類可以很方便的獲取解析度。下面
Android中的ViewRootImpl類原始碼解析
ViewRoot目前這個類已經沒有了,是老版本中的一個類,在Android2.2以後用ViewRootImpl代替ViewRoot,對應於ViewRootImpl.java,他是連結WindowManager和DecorView的紐帶,另外View的繪製也是通過ViewRootImpl來完成的。 它的主要作
Android 檔案操作幫助類FileUtils檔案
/* * Copyright (C) 2006 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * y
.net開發中MysqlHelper幫助類
web.config配置 <add key="version" value="v1.2.1" /> <add key="MySQLconn" value="server=;database=moonshinetest;user id=r
Android 中使用 ComponentName 類
android中可以使用Intent時 可以用setClass() 還可以使用ComponentNameJava 程式碼 package com.huawei; import android.app.Activity; import android.content.C
Android中的Context類解析
一、Context類官方說明: 是應用程式全域性資訊資料有關的方法類 是一個抽象類,由android 系統提供該類的具體實現類ContextImppl類 通過context可以獲取應用程式的resources和classes等 二、Context類的
Android中的Context類簇(裝飾模式)及Context用法詳解,Application用法詳解
一,Context類簇中的類概述 Context的API文件 類關係: Context類 Context是一個抽象類,原始碼位於android.content包中。描述的是一個應用程式環境的資訊,即上下文。通過它我們可以獲取應用程式的資源和類
android中支持多種文件類型的下載類
context nts 下載 tor oid tracking ref pen art String directoryName = Environment.getExternalStorageDirectory().toString()
Android 中圖能夠用到的圖片處理類 BitmapUtils
andro radius title can rup decode eww row 上下 Android在實際開發中非常多時候都要對圖片進行一定的處理,這裏總結的BitmapUtils 類包含一下幾個功能: 1.Android圖片倒影, 2.Android圖片模糊處理,
android中Log類的封裝
col mark pre class 打印日誌 static sta 日誌 blog 1.為了方便的使用Log打印日誌,以及後續方便撤銷日誌打印,所以對Log類進行封裝是一件好事。 1 package market.phone; 2 3 import androi
Android中Calendar類的用法總結
jsb ews 寫法 需要 key data- minute bar 來講 Calendar是Android開發中需要獲取時間時必不可少的一個工具類,通過這個類可以獲得的時間信息還是很豐富的,下面做一個總結,以後使用的時候就不用總是去翻書或者查資料了。 在獲取時間之前要先獲
Android原始碼中引用@hide類出現引用異常的問題error: cannot find symbol
自己開發的APP在Android中使用一些系統隱藏的類 編譯的時候報錯,出現如下異常 error: cannot find symbol import android.net.EthernetM
說說如何使用 Android 中的 Intent 來傳遞類物件
使用 Intent 來傳遞物件有兩種方式:Serializable 和 Parcelable。 1 Serializable 方式 假設有一個 POJO 的 Account 類,該類實現了 Serializable 介面: public class Account im
Android中反射機制解析 API介紹 建立private構造方法類例項 反射內部類 使用demo
反射 前言 相關知識點 編譯型語言和解釋型語言 動態型別語言和靜態型別語言 反射(Reflection) Class Class類API Constructor類 AP
Android 中的動畫有哪幾類,它們的特點和區別是什麼?
1、Drawable Animation 幀動畫,Frame動畫,指通過指定的每一幀的圖片和播放時間,有序的進行播放而形成的動畫效果 2、View Animation 檢視動畫,也就是所謂的補間動畫。指通過指定View的初始狀態、變化時間、方式、通過一系列的演算法去進行圖片變換,從而
android中px,sp,dp之間相互轉化的工具類
在平時開發中,難免遇到需要在程式碼裡對尺寸進行轉化的問題,在這裡總結一下,方便以後呼叫 public class DensityUtil { /** * dp轉換成px */ private int dp2px(Context context,float dp