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> 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 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

你可能感兴趣的:(Android)