Android中对SD卡/U盘挂载和卸载的监听

Android系统中,当SD卡挂载在电脑上时候,如果手动将语音备忘录中的录音删除的时,那么相应数据库中的数据也是需要修改的。此时实现需要对挂载进行监听,需要继承BroadcastReceiver类,实现其中的onRecieve(Context context, Intent inten)方法。代码如下:

此时须在Manifest中进行注册:

参考链接


android中对SD卡挂载和卸载的监听

Java 读写Properties配置文件

1.Properties类与Properties配置文件

Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集。不过Properties有特殊的地方,就是它的键和值都是字符串类型。

2.Properties中的主要方法

(1)load(InputStream inStream)

   这个方法可以从.properties属性文件对应的文件输入流中,加载属性列表到Properties类对象如下面的代码:

(2)store(OutputStream out, String comments)

这个方法将Properties类对象的属性列表保存到输出流中如下面的代码:

如果comments不为空,保存后的属性文件第一行会是#comments,表示注释信息;如果为空则没有注释信息。

注释信息后面是属性文件的当前保存时间信息。

(3)getProperty/setProperty

这两个方法是分别是获取和设置属性信息。

3.代码实例

属性文件a.properties如下:

读取a.properties属性列表,与生成属性文件b.properties。代码如下:

参考链接


Java 读写Properties配置文件

Android获取外接SD卡或者U盘路径方法

最近在开发Android时遇到插U盘获取U盘内容的需求,但是按照传统的Environment.getExternalStorageDirectory()只能读取到插入的SD卡的路径,如果是U盘的话无法读出U盘的路径。

最终在一个在CSDN的论坛里找到相关的东西,就试了下直接通过StorageManager获取存储路径的。

核心如下,volumePaths的数组就是系统外接设备的路径,经过测试的确是挂载的路径。不过有些是不可用的,它只是列出了系统可支持的外接路径。

参考链接


android获取外接SD卡或者U盘路径方法

NoClassdefFoundError R$layout

工程引入了jar包,jar包使用了R.layout.xx,但这个layout并没有打进jar包导致找不到R.layout.xx。

It's because inside JAR doesn't contain resource folder of SDK Project.

解决方法有两种:

  1. 导入SDK Project,并以lib的形式依赖。

    如果要把jar包提供出去,则需要使用方法2

  2. 首先,使用下面的方法替代R(在SDK中,R自动为SDK的包名,引入他人工程后肯定找不到这个R,所以不能在SDK中使用R)

    public static int getResourseIdByName(String packageName, String className, String name) {
    Class r = null;
    int id = 0;
    try {
    r = Class.forName(packageName + ".R");

    Class[] classes = r.getClasses();
    Class desireClass = null;

    for (int i = 0; i < classes.length; i++) {
    if(classes[i].getName().split("\\$")[1].equals(className)) {
    desireClass = classes[i];

    break;
    }
    }

    if(desireClass != null)
    id = desireClass.getField(name).getInt(desireClass);
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    } catch (IllegalArgumentException e) {
    e.printStackTrace();
    } catch (SecurityException e) {
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    e.printStackTrace();
    } catch (NoSuchFieldException e) {
    e.printStackTrace();
    }

    return id;

    }

    举例,如果以前使用了 R.layout.main,现在需要使用getResourseIdByName(context.getPackageName(), "layout", "main")      以前使用了R.id.mView,现在需要使用getResourseIdByName(context.getPackageName(), "id", "mView")

然后,把用到的资源从SDK中copy到Apk工程。

源自http://stackoverflow.com/questions/14373004/java-lang-noclassdeffounderror-com-facebook-android-rlayout-error-when-using-f

 

Android 获取签名以及MD5指纹

获取指定已安装完整签名信息,包括MD5指纹:

参考链接


android获取APK签名信息及MD5指纹

Android获得内存信息

在Android中,想要获得进程内存信息,有两类方法

1.exec大法,使用Runtime.getRuntime().exec()方法来执行命令行,主要命令行有 dumpsys(需要system权限)  cat /proc等

private String catProc() {
StringBuilder meminfo = new StringBuilder();
try {
ArrayList<String> commandLine = new ArrayList<String>();
commandLine.add("cat");
// commandLine.add("/proc/meminfo");
commandLine.add("/proc/" + android.os.Process.myPid() + "/status");

Process process = Runtime.getRuntime().exec(commandLine.toArray(new String[commandLine.size()]));
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

String line;
while ((line = bufferedReader.readLine()) != null) {
meminfo.append(line);
meminfo.append("\n");
}

} catch (IOException e) {
Log.e(TAG, "Could not read /proc/meminfo", e);
}

Log.i(TAG, "showMeminfo = " + meminfo.toString());

return meminfo.toString();
}

2.android.os.Debug

Debug类有大量的获取内存信息方法,如getPss,用起来很简单

 

使用jar包中的service

要使用jar包或lib中的service,

假如 app包名为 com.app.xx

jar包名为 com.jar.xx

需要在当前app的manifest中声明service,且使用jar包中的包名,全路径,

android:name="com.jar.xx.xxService"

同时声明exported为true

android:exported="true"

<service
android:name="com.jar.xx.xxService"
android:enabled="true"
android:exported="true" />

之后就可以使用am指令打开/关闭service了

打开service ()
adb shell am startservice -n com.app.xx/com.jar.xx.xxService
关闭service
1.adb shell am stopservice -n com.app.xx/com.jar.xx.xxService
2.可能android低版本会不支持 stopservice命令。备用关闭方法: adb shell am force-stop com.app.xx (会关闭整个进程,用kill进程不行,service会自动重启)

IPFire的Web管理页面中增加中文语言

1.在语言列表中增加中文选项

在最后面增加zh:简体中文:中国,最后的内容如下所示:

2.复制英文语言文件为中文文件

3.修改需要显示的英文为中文,注意,里面的内容,前面为键值,后面为显示的内容,比如:

修改为:

4.修改完成后,刷新语言文件缓存

5.在网页中的GUI Setings中选择语言为简体中文即可。

参考链接


Creating language file