Android技巧

Android 开发中的一些小技巧

dip转px
1
2
3
4
5
public int convertDipOrPx( int dip) {
     float scale = MarketApplication.getMarketApplicationContext()
             .getResources().getDisplayMetrics().density;
     return ( int ) (dip * scale + 0 .5f * (dip >= 0 ? 1 : - 1 ));
}
获取当前窗体,并添加自定义view:
1
2
3
4
5
6
7
8
9
10
getWindowManager()
                 .addView(
                         overlay,
                         new WindowManager.LayoutParams(
                                 LayoutParams.WRAP_CONTENT,
                                 LayoutParams.WRAP_CONTENT,
                                 WindowManager.LayoutParams.TYPE_APPLICATION,
                                 WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                                         | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
                                 PixelFormat.TRANSLUCENT));
自定义fastScrollBar图片样式:
1
2
3
4
5
6
7
8
9
10
11
12
13
try {
     Field f = AbsListView. class .getDeclaredField( "mFastScroller" );
     f.setAccessible( true );
     Object o = f.get(listView);
     f = f.getType().getDeclaredField( "mThumbDrawable" );
     f.setAccessible( true );
     Drawable drawable = (Drawable) f.get(o);
     drawable = getResources().getDrawable(R.drawable.ic_launcher);
     f.set(o, drawable);
     Toast.makeText( this , f.getType().getName(), 1000 ).show();
} catch (Exception e) {
     throw new RuntimeException(e);
}

=网络==================================

判断网络是否可用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
      * 网络是否可用
      *
      * @param context
      * @return
      */
     public static boolean isNetworkAvailable(Context context) {
         ConnectivityManager mgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
         NetworkInfo[] info = mgr.getAllNetworkInfo();
         if (info != null ) {
             for ( int i = 0 ; i < info.length; i++) {
                 if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                     return true ;
                 }
             }
         }
         return false ;
     }

方法二:

1
2
3
4
5
6
7
8
9
10
11
12
13
/*
  * 判断网络连接是否已开 2012-08-20true 已打开 false 未打开
  */
public static boolean isConn(Context context) {
     boolean bisConnFlag = false ;
     ConnectivityManager conManager = (ConnectivityManager) context
             .getSystemService(Context.CONNECTIVITY_SERVICE);
     NetworkInfo network = conManager.getActiveNetworkInfo();
     if (network != null ) {
         bisConnFlag = conManager.getActiveNetworkInfo().isAvailable();
     }
     return bisConnFlag;
}
判断是不是Wifi连接:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static boolean isWifiActive(Context icontext) {
     Context context = icontext.getApplicationContext();
     ConnectivityManager connectivity = (ConnectivityManager) context
             .getSystemService(Context.CONNECTIVITY_SERVICE);
     NetworkInfo[] info;
     if (connectivity != null ) {
         info = connectivity.getAllNetworkInfo();
         if (info != null ) {
             for ( int i = 0 ; i < info.length; i++) {
                 if (info[i].getTypeName().equals( "WIFI" )
                         && info[i].isConnected()) {
                     return true ;
                 }
             }
         }
     }
     return false ;
}
判断当前网络类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
      * 网络方式检查
      */
     private static int netCheck(Context context) {
         ConnectivityManager conMan = (ConnectivityManager) context
                 .getSystemService(Context.CONNECTIVITY_SERVICE);
         State mobile = conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
                 .getState();
         State wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
                 .getState();
         if (wifi.equals(State.CONNECTED)) {
             return DO_WIFI;
         } else if (mobile.equals(State.CONNECTED)) {
             return DO_3G;
         } else {
             return NO_CONNECTION;
         }
     }


获取下载文件的真实名字
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public String getReallyFileName(String url) {
     StrictMode.setThreadPolicy( new StrictMode.ThreadPolicy.Builder()
             .detectDiskReads().detectDiskWrites().detectNetwork() // 这里可以替换为detectAll()
                                                                   // 就包括了磁盘读写和网络I/O
             .penaltyLog() // 打印logcat,当然也可以定位到dropbox,通过文件保存相应的log
             .build());
     StrictMode.setVmPolicy( new StrictMode.VmPolicy.Builder()
             .detectLeakedSqlLiteObjects() // 探测SQLite数据库操作
             .penaltyLog() // 打印logcat
             .penaltyDeath().build());
 
     String filename = "" ;
     URL myURL;
     HttpURLConnection conn = null ;
     if (url == null || url.length() < 1 ) {
         return null ;
     }
 
     try {
         myURL = new URL(url);
         conn = (HttpURLConnection) myURL.openConnection();
         conn.connect();
         conn.getResponseCode();
         URL absUrl = conn.getURL(); // 获得真实Url
         // 打印输出服务器Header信息
         // Map<String, List<String>> map = conn.getHeaderFields();
         // for (String str : map.keySet()) {
         // if (str != null) {
         // Log.e("H3c", str + map.get(str));
         // }
         // }
         filename = conn.getHeaderField( "Content-Disposition" ); // 通过Content-Disposition获取文件名,这点跟服务器有关,需要灵活变通
         if (filename == null || filename.length() < 1 ) {
             filename = URLDecoder.decode(absUrl.getFile(), "UTF-8" );
         }
     } catch (MalformedURLException e) {
         e.printStackTrace();
     } catch (IOException e) {
         e.printStackTrace();
     } finally {
         if (conn != null ) {
             conn.disconnect();
             conn = null ;
         }
     }
 
     return filename;
}

=图片==========================

bitmap转Byte数组(微信分享就需要用到)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public byte [] bmpToByteArray( final Bitmap bmp, final boolean needRecycle) {
         ByteArrayOutputStream output = new ByteArrayOutputStream();
         bmp.compress(CompressFormat.PNG, 100 , output);
         if (needRecycle) {
             bmp.recycle();
         }
 
         byte [] result = output.toByteArray();
         try {
             output.close();
         } catch (Exception e) {
             e.printStackTrace();
         }
 
         return result;
     }
Resources转Bitmap
1
2
3
4
5
6
7
8
9
public Bitmap loadBitmap(Resources res, int id) {
         BitmapFactory.Options opt = new BitmapFactory.Options();
         opt.inPreferredConfig = Bitmap.Config.RGB_565;
         opt.inPurgeable = true ;
         opt.inInputShareable = true ;
 
         InputStream is = res.openRawResource(id); // 获取资源图片
         return BitmapFactory.decodeStream(is, null , opt);
     }
保存图片到SD卡
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public void saveBitmapToFile(String url, String filePath) {
         File iconFile = new File(filePath);
         if (!iconFile.getParentFile().exists()) {
             iconFile.getParentFile().mkdirs();
         }
 
         if (iconFile.exists() && iconFile.length() > 0 ) {
             return ;
         }
 
         FileOutputStream fos = null ;
         InputStream is = null ;
         try {
             fos = new FileOutputStream(filePath);
             is = new URL(url).openStream();
 
             int data = is.read();
             while (data != - 1 ) {
                 fos.write(data);
                 data = is.read();
             }
         } catch (IOException e) {
             e.printStackTrace();
         } finally {
             try {
                 if (is != null ) {
                     is.close();
                 }
                 if (fos != null ) {
                     fos.close();
                 }
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }
     }

=系统==============================

根据包名打开一个应用程序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public boolean openApp(String packageName) {
     PackageInfo pi = null ;
     try {
         pi = mPM.getPackageInfo(packageName, 0 );
     } catch (NameNotFoundException e) {
         e.printStackTrace();
         return false ;
     }
 
     if (pi == null ) {
         return false ;
     }
 
     Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null );
     resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
     resolveIntent.setPackage(pi.packageName);
 
     List<ResolveInfo> apps = mPM.queryIntentActivities(resolveIntent, 0 );
 
     ResolveInfo ri = null ;
     try {
         ri = apps.iterator().next();
     } catch (Exception e) {
         return true ;
     }
     if (ri != null ) {
         String tmpPackageName = ri.activityInfo.packageName;
         String className = ri.activityInfo.name;
 
         Intent intent = new Intent(Intent.ACTION_MAIN);
         intent.addCategory(Intent.CATEGORY_LAUNCHER);
 
         ComponentName cn = new ComponentName(tmpPackageName, className);
 
         intent.setComponent(cn);
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         MarketApplication.getMarketApplicationContext().startActivity(
                 intent);
     } else {
         return false ;
     }
     return true ;
}
判断是否APK是否安装过
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public boolean checkApkExist(Context context, String packageName) {
         if (packageName == null || "" .equals(packageName))
             return false ;
         try {
             ApplicationInfo info = context.getPackageManager()
                     .getApplicationInfo(packageName,
                             PackageManager.GET_UNINSTALLED_PACKAGES);
             return true ;
         } catch (NameNotFoundException e) {
             return false ;
         } catch (NullPointerException e) {
             return false ;
         }
     }
安装APK
1
2
3
4
5
6
7
8
9
public void installApk(Context context, String strFileAllName) {
     File file = new File(strFileAllName);
     Intent intent = new Intent();
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     intent.setAction(Intent.ACTION_VIEW);
     String type = "application/vnd.android.package-archive" ;
     intent.setDataAndType(Uri.fromFile(file), type);
     context.startActivity(intent);
}
卸载APK
1
2
3
4
5
public void UninstallApk(Context context, String strPackageName) {
     Uri packageURI = Uri.parse( "package:" + strPackageName);
     Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
     context.startActivity(uninstallIntent);
}
判断SD卡是否可用
1
2
3
4
5
6
7
8
public boolean CheckSD() {
     if (android.os.Environment.getExternalStorageState().equals(
             android.os.Environment.MEDIA_MOUNTED)) {
         return true ;
     } else {
         return false ;
     }
}
创建快捷方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public void createShortCut(Context contxt) {
     // if (isInstallShortcut()) {// 如果已经创建了一次就不会再创建了
     // return;
     // }
 
     Intent sIntent = new Intent(Intent.ACTION_MAIN);
     sIntent.addCategory(Intent.CATEGORY_LAUNCHER); // 加入action,和category之后,程序卸载的时候才会主动将该快捷方式也卸载
     sIntent.setClass(contxt, Login. class );
 
     Intent installer = new Intent();
     installer.putExtra( "duplicate" , false );
     installer.putExtra( "android.intent.extra.shortcut.INTENT" , sIntent);
     installer.putExtra( "android.intent.extra.shortcut.NAME" , "名字" );
     installer.putExtra( "android.intent.extra.shortcut.ICON_RESOURCE" ,
             Intent.ShortcutIconResource
                     .fromContext(contxt, R.drawable.icon));
     installer.setAction( "com.android.launcher.action.INSTALL_SHORTCUT" );
     contxt.sendBroadcast(installer);
}
判断快捷方式是否创建:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
private boolean isInstallShortcut() {
         boolean isInstallShortcut = false ;
         final ContentResolver cr = MarketApplication
                 .getMarketApplicationContext().getContentResolver();
         String AUTHORITY = "com.android.launcher.settings" ;
         Uri CONTENT_URI = Uri.parse( "content://" + AUTHORITY
                 + "/favorites?notify=true" );
 
         Cursor c = cr.query(CONTENT_URI,
                 new String[] { "title" , "iconResource" }, "title=?" ,
                 new String[] { "名字" }, null );
         if (c != null && c.getCount() > 0 ) {
             isInstallShortcut = true ;
         }
 
         if (c != null ) {
             c.close();
         }
 
         if (isInstallShortcut) {
             return isInstallShortcut;
         }
 
         AUTHORITY = "com.android.launcher2.settings" ;
         CONTENT_URI = Uri.parse( "content://" + AUTHORITY
                 + "/favorites?notify=true" );
         c = cr.query(CONTENT_URI, new String[] { "title" , "iconResource" },
                 "title=?" , new String[] { "名字" }, null );
         if (c != null && c.getCount() > 0 ) {
             isInstallShortcut = true ;
         }
 
         if (c != null ) {
             c.close();
         }
 
         AUTHORITY = "com.baidu.launcher" ;
         CONTENT_URI = Uri.parse( "content://" + AUTHORITY
                 + "/favorites?notify=true" );
         c = cr.query(CONTENT_URI, new String[] { "title" , "iconResource" },
                 "title=?" , new String[] { "名字" }, null );
         if (c != null && c.getCount() > 0 ) {
             isInstallShortcut = true ;
         }
 
         if (c != null ) {
             c.close();
         }
 
         return isInstallShortcut;
     }
过滤特殊字符:
1
2
3
4
5
6
7
8
9
private String StringFilter(String str) throws PatternSyntaxException {
     // 只允许字母和数字
     // String regEx = "[^a-zA-Z0-9]";
     // 清除掉所有特殊字符
     String regEx = "[`~!@#$%^&*()+=|{}':;',//[//].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]" ;
     Pattern p = Pattern.compile(regEx);
     Matcher m = p.matcher(str);
     return m.replaceAll( "" ).trim();
}
执行shell语句:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public int execRootCmdSilent(String cmd) {
     int result = - 1 ;
     DataOutputStream dos = null ;
 
     try {
         Process p = Runtime.getRuntime().exec( "su" );
         dos = new DataOutputStream(p.getOutputStream());
         dos.writeBytes(cmd + "\n" );
         dos.flush();
         dos.writeBytes( "exit\n" );
         dos.flush();
         p.waitFor();
         result = p.exitValue();
     } catch (Exception e) {
         e.printStackTrace();
     } finally {
         if (dos != null ) {
             try {
                 dos.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }
     }
     return result;
}
获得文件MD5值:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public String getFileMD5(File file) {
     if (!file.isFile()) {
         return null ;
     }
 
     MessageDigest digest = null ;
     FileInputStream in = null ;
     byte buffer[] = new byte [ 1024 ];
     int len;
     try {
         digest = MessageDigest.getInstance( "MD5" );
         in = new FileInputStream(file);
         while ((len = in.read(buffer, 0 , 1024 )) != - 1 ) {
             digest.update(buffer, 0 , len);
         }
     } catch (Exception e) {
         e.printStackTrace();
         return null ;
     } finally {
         if (in != null ) {
             try {
                 in.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }
     }
     BigInteger bigInt = new BigInteger( 1 , digest.digest());
     return bigInt.toString( 16 );
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值