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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值