在工作中突然发现以前多么熟悉的知识技能现在不能愉快的玩耍了,想要再次使用以前的一些知识还得Google,这是一件多么伤心的事啊。这些天比较闲,打算把最近用到的小知识总结下,这里会持续更新。还是应了那句话,“知识在于积累”。
好,开工啦!
设备信息的获取
下面以Samsung SM-N9006(Android 4.4.2 API19)为例
手机的型号
1 | /** 手机的型号 */ |
手机的OS版本号
1 | /** 手机的OS版本号 */ |
设备的DeviceId
1 | /** |
APP信息的获取
获取PackageInfo
1 | public static PackageInfo getPackageInfo() { |
获取版本号
1 | /** 手机版本号 */ |
获取版本信息
1 | /** 手机的版本名 */ |
检查apk文件是否为一个完整的apk文件
1 | /** 检查下载完成的apk文件,是否为一个完整的apk文件 */ |
存储操作
外置存储(sdcard)
检查sdcard是否存在
1 | /** 检查sdcard是否存在(安装好) */ |
可以这样配置路径Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator+"MobileOffice"+File.separator+"upgrade"
得到外置存储的root的绝对路径
1 | /** 得到外置存储的root的绝对路径,一般为 /storage/emulated/0 */ |
创建sdcard的文件夹
1 | // dir 要创建sdcard的文件夹的绝对路径 |
内部存储
得到cashe路径
1 | String cachePath = context.getCacheDir().getAbsolutePath(); |
MD5加密
方法一
1 | public final static String MD5(String s) { |
方法二
1 | /** 对原始字符串进行md5的hash计算 */ |
方法三
1 | public String Md5(String plainText) { |
判断给定字符串是否空白串
1 | /** |
对指定字符串隐藏
对字符串中间部分隐藏
1 | /** |
对字符串两边部分隐藏
1 | /** |
对.properties文件的加载解析
1 | // msgId 为键值对的key |
得到所有进程Task最上面的Activity
1 | public static String getTopActivity(Context context) { |
获取Html相关内容
获取Html的title
1 | // 通过正则表达式提取 |
获取Html的所欲IMG
1 | static final String REG_IMG = "<img.+src=\"(.+)\".+>"; |
获取Html的所欲meta
1 | static final String REG_DESCRIPTION = ".*<meta name=\"description\" content=\"([^>]+)\">.*"; |
图片处理框架用法
ImageLoader(一)
1 | ImageLoader.getInstance().displayImage( |
或者:
先定义DisplayImageOptions
1
2
3
4
5
6
7public static DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageForEmptyUri(R.drawable.default_patient)
.showImageOnFail(R.drawable.default_patient)
// .displayer(new RoundedBitmapDisplayer(10))
// .considerExifParams(true)
.cacheInMemory(true)
.build();在使用的地方加载并显示
1 | ImageLoader.getInstance().displayImage(imgUrl, imageView, options); |
ImageLoader(二)
- 先定义
1 | // 第一次显示监听器 |
- 在使用的地方加载并显示
1 | ImageLoader.getInstance().displayImage(imgUrl, |
下载网络图片
1 | /** 图片Url保存为位图并进行缩放操作,通过传入图片url获取位图方法 */ |
手机号码限制
1 | /** |
蓝牙Bluetooth
Android 中打开 Bluetooth:有以下三种方法:
- 强制打开
- 调用系统弹出框提示用户打开
- 跳转到系统设置中让用户自己打开
获取BluetoothAdapter
1 | public static BluetoothAdapter getBluetoothAdapter() { |
当前 Android 设备是否支持 Bluetooth
1 | // true:支持 Bluetooth false:不支持 Bluetooth |
当前 Android 设备的 bluetooth 是否已经开启
1 | /** 没有直接的用户的允许绝不要开启 Bluetooth。如果你想要打开 Bluetooth 创建一个无线连接,你应当使用 ACTION_REQUEST_ENABLE Intent,这样会弹出一个提示框提示用户是否开启 Bluetooth,enable() 方法仅提供给有 UI 、更改系统设置的应用来使用,例如“电源管理”应用。 */ |
强制打开
1 | // 强制开启当前 Android 设备的 Bluetooth |
调用系统弹出框提示用户打开
1 | // 弹出系统弹框提示用户打开 Bluetooth |
强制关闭
1 | BluetoothAdapter.getDefaultAdapter().disable(); |
蓝牙是否打开
1 | BluetoothAdapter.getDefaultAdapter().isEnabled(); |
获取以配对的蓝牙设备
1 | // 首次连接某蓝牙设备需要先配对,一旦配对成功,该设备的信息会被保存,以后连接时无需再配对,但是已配对的设备不一定是能连接的。 |
蓝牙广播接收器
1 | public BroadcastReceiver receiver = new BroadcastReceiver() { |
音视频
声音处理
播放系统.ogg文件
1 | // 需要注意的是,如果MediaPlayer实例是由create方法创建的,那么第一次启动播放前不需要再调用prepare()了,因为create方法里已经调用过了。 |
密码格式是否正确
- 8到10位并且包含字母和数字
1 | boolean isTrue = Pattern.compile("^(?=.*[0-9])(?=.*[a-zA-Z]).{8,10}$").matcher(pass).matches(); |
- 8到10位数字
1 | boolean isTrue = Pattern.compile("^(?=.*[0-9]).{8,10}$").matcher(pass).matches(); |
小数处理
计算百分比
1 | /** |
按pattern格式化小数
1 | /** |
1 | // 通过下面调用 |
程序是否在前台运行
1 | public boolean isAppOnForeground(Context context) { |
关闭软键盘
软键盘(一)
1 | /** |
软键盘(二)
1 | // 隐藏android键盘 |
软键盘(三)
1 | /** |
改变透明度
1 | /** |
获取每个应用程序最高可用内存
1 | // 可以通过以下代码获取当前应用程序最高可用内存 |