1、发送不重复的通知(Notification)
public static void sendNotification(Context context, String title, String message, Bundle extras) { Intent mIntent = new Intent(context, FragmentTabsActivity.class); mIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); mIntent.putExtras(extras); int requestCode = (int) System.currentTimeMillis(); PendingIntent mContentIntent = PendingIntent.getActivity(context, requestCode, mIntent, 0); Notification mNotification = new NotificationCompat.Builder(context) .setContentTitle(title).setSmallIcon(R.drawable.app_icon) .setContentIntent(mContentIntent).setContentText(message) .build(); mNotification.flags |= Notification.FLAG_AUTO_CANCEL; mNotification.defaults = Notification.DEFAULT_ALL; NotificationManager mNotificationManager = (NotificationManager) context .getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.notify(requestCode, mNotification); }
代码说明:
关键点在这个requestCode,这里使用的是当前系统时间,巧妙的保证了每次都是一个新的Notification产生。
2、代码设置TextView的样式
使用过自定义Dialog可能马上会想到用如下代码:
new TextView(this,null,R.style.text_style);
但你运行这代码你会发现毫无作用!正确用法:
new TextView(new ContextThemeWrapper(this, R.style.text_style))
3、 ip地址转成8位十六进制串
/** ip转16进制 */ public static String ipToHex(String ips) { StringBuffer result = new StringBuffer(); if (ips != null) { StringTokenizer st = new StringTokenizer(ips, "."); while (st.hasMoreTokens()) { String token = Integer.toHexString(Integer.parseInt(st.nextToken())); if (token.length() == 1) token = "0" + token; result.append(token); } } return result.toString(); } /** 16进制转ip */ public static String texToIp(String ips) { try { StringBuffer result = new StringBuffer(); if (ips != null && ips.length() == 8) { for (int i = 0; i < 8; i += 2) { if (i != 0) result.append('.'); result.append(Integer.parseInt(ips.substring(i, i + 2), 16)); } } return result.toString(); } catch (NumberFormatException ex) { Logger.e(ex); } return ""; }
ip:192.168.68.128 16 =>hex :c0a84480
4、WebView保留缩放功能但隐藏缩放控件
mWebView.getSettings().setSupportZoom(true); mWebView.getSettings().setBuiltInZoomControls(true); if (DeviceUtils.hasHoneycomb()) mWebView.getSettings().setDisplayZoomControls(false);
注意:setDisplayZoomControls是在API Level 11中新增。
5、获取网络类型名称
1 public static String getNetworkTypeName(Context context) { 2 if (context != null) { 3 ConnectivityManager connectMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 4 if (connectMgr != null) { 5 NetworkInfo info = connectMgr.getActiveNetworkInfo(); 6 if (info != null) { 7 switch (info.getType()) { 8 case ConnectivityManager.TYPE_WIFI: 9 return "WIFI"; 10 case ConnectivityManager.TYPE_MOBILE: 11 return getNetworkTypeName(info.getSubtype()); 12 } 13 } 14 } 15 } 16 return getNetworkTypeName(TelephonyManager.NETWORK_TYPE_UNKNOWN); 17 } 18 19 public static String getNetworkTypeName(int type) { 20 switch (type) { 21 case TelephonyManager.NETWORK_TYPE_GPRS: 22 return "GPRS"; 23 case TelephonyManager.NETWORK_TYPE_EDGE: 24 return "EDGE"; 25 case TelephonyManager.NETWORK_TYPE_UMTS: 26 return "UMTS"; 27 case TelephonyManager.NETWORK_TYPE_HSDPA: 28 return "HSDPA"; 29 case TelephonyManager.NETWORK_TYPE_HSUPA: 30 return "HSUPA"; 31 case TelephonyManager.NETWORK_TYPE_HSPA: 32 return "HSPA"; 33 case TelephonyManager.NETWORK_TYPE_CDMA: 34 return "CDMA"; 35 case TelephonyManager.NETWORK_TYPE_EVDO_0: 36 return "CDMA - EvDo rev. 0"; 37 case TelephonyManager.NETWORK_TYPE_EVDO_A: 38 return "CDMA - EvDo rev. A"; 39 case TelephonyManager.NETWORK_TYPE_EVDO_B: 40 return "CDMA - EvDo rev. B"; 41 case TelephonyManager.NETWORK_TYPE_1xRTT: 42 return "CDMA - 1xRTT"; 43 case TelephonyManager.NETWORK_TYPE_LTE: 44 return "LTE"; 45 case TelephonyManager.NETWORK_TYPE_EHRPD: 46 return "CDMA - eHRPD"; 47 case TelephonyManager.NETWORK_TYPE_IDEN: 48 return "iDEN"; 49 case TelephonyManager.NETWORK_TYPE_HSPAP: 50 return "HSPA+"; 51 default: 52 return "UNKNOWN"; 53 } 54 }
6、Android解压Zip包
/**
* 解压一个压缩文档 到指定位置
*
* @param zipFileString 压缩包的名字
* @param outPathString 指定的路径
* @throws Exception
*/
public static void UnZipFolder(String zipFileString, String outPathString) throws Exception {
java.util.zip.ZipInputStream inZip = new java.util.zip.ZipInputStream(new java.io.FileInputStream(zipFileString));
java.util.zip.ZipEntry zipEntry;
String szName = "";
while ((zipEntry = inZip.getNextEntry()) != null) {
szName = zipEntry.getName();
if (zipEntry.isDirectory()) {
// get the folder name of the widget
szName = szName.substring(0, szName.length() - 1);
java.io.File folder = new java.io.File(outPathString + java.io.File.separator + szName);
folder.mkdirs();
} else {
java.io.File file = new java.io.File(outPathString + java.io.File.separator + szName);
file.createNewFile();
// get the output stream of the file
java.io.FileOutputStream out = new java.io.FileOutputStream(file);
int len;
byte[] buffer = new byte[1024];
// read (len) bytes into buffer
while ((len = inZip.read(buffer)) != -1) {
// write (len) byte from buffer at the position 0
out.write(buffer, 0, len);
out.flush();
}
out.close();
}
}//end of while
inZip.close();
}//end of func
7、 从assets中读取文本和图片资源
/** 从assets 文件夹中读取文本数据 */ public static String getTextFromAssets(final Context context, String fileName) { String result = ""; try { InputStream in = context.getResources().getAssets().open(fileName); // 获取文件的字节数 int lenght = in.available(); // 创建byte数组 byte[] buffer = new byte[lenght]; // 将文件中的数据读到byte数组中 in.read(buffer); result = EncodingUtils.getString(buffer, "UTF-8"); in.close(); } catch (Exception e) { e.printStackTrace(); } return result; } /** 从assets 文件夹中读取图片 */ public static Drawable loadImageFromAsserts(final Context ctx, String fileName) { try { InputStream is = ctx.getResources().getAssets().open(fileName); return Drawable.createFromStream(is, null); } catch (IOException e) { if (e != null) { e.printStackTrace(); } } catch (OutOfMemoryError e) { if (e != null) { e.printStackTrace(); } } catch (Exception e) { if (e != null) { e.printStackTrace(); } } return null; }