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

修改IPFire内网网卡地址

IPFire内网网卡地址一旦设置完成后,在Web控制的主界面中,是找不到修改的地方的,因此,只能在命令行中重新调用设置命令来重新配置。

Web页面中开启SSH Access,以支持Shell进行控制

IPFireWebGuiSSHAccess

IPFireWebGuiSSHAccessSSHConfigure

Shell的登陆界面中输入setup界面,唤出设置界面:

IPFireSetupCommand

接下来,就是一步步的设置了

IPFireSetupCommandMenu

参考链接


Changing the "Green IP Address of IP fire"

开源防火墙IPFire的配置

IPFireLinux源代码建立的防火墙,并且还带有大量的附加功能。它易于设置和管理。它采用的状态检测防火墙,内容过滤引擎,通信质量控制(QoS),VPN技术,和大量的记录。IPFire是基于模块化设计具有高度的灵活性,最重要它是开源的并且基于状态检测的防火墙。你可以到http://www.ipfire.org/downloads下载安装镜像。
DownloadIPFireWebSite 一.下面是用Virtual Box虚拟机安装过程,首先新建一个虚拟机VirtualBoxNewIPFire_x64_1二.选择下载好的镜像文件 IPFireIsoImage_x86_64

2.1在这里需要注意,安装IPFire至少要有两张网卡 ,分别绑定到两个个区域(下面会讲到)
VirtualBox_NetWorkCard_1

VirtualBox_NetWorkCard_2

三.运行虚拟机,进入安装画面,键入Enter继续 IPFireInstallView1 四.选择安装语言,没有中文 = = IPFireInstallViewLanaguage

IPFireInstallViewStartInstalltion

IPFireInstallViewLicense

五.选择安装到哪些硬盘,确定是否进行分区

IPFireInstallViewDeleteAllData

六.选择文件系统,默认ext4即可。IPFireInstallViewFileSytem

七.安装完成RebootIPFireInstallViewReboot

八.重启进行选择界面 IPFireViewLanuch

九.对IPFire进行初始化(键盘,时区,主机名,系统密码,web管理密码,安全区域等)

9.1 键盘布局

IpFireSettingKeyBoard

9.2 时区选择

IpFireSettingTimeZone

9.3 主机名设置

IPFireSettingHostName

9.4 域名称设置

IPFireSettingDomainName

9.5 系统密码设置(root)

IPFireSettingRootPassword

9.6 Web管理密码设置(admin)

IPFireSettingAdminPassword

9.7 安全区域设置

IPFireSettingNetworkConfiguration

IPFireSettingNetworkConfigurationType

IPFire把网络分为不同的颜色代表一个共同的计算机的安全等级:

  • 绿色 代表一个安全的地方。这就是所谓咱们的内网。
  • 红色 代表一般危险,就是所谓的互联网
  • 蓝色 代表了无线局域网络的一部分。
  • 橙色 通常被称为非军事区(DMZ)。

9.8 将两张网卡关联到两个安全区域上

IPFireSettingNetworkConfigurationDeiversAndCardAssignments

IPFireSettingNetworkConfigurationAssignedCards 

IPFireSettingNetworkConfigurationAssignedCardsFinal

9.9 分别设置两个区域的IP地址

IPFireSettingNetworkConfigurationMenuAddressSettings

IPFireSettingNetworkConfigurationAddressSettings

9.10 RED区域就是所谓的外网,可以用三种方式(静态,DHCP, PPPOE),此处的外网,我们直接使用DHCP来分配即可。

IPFireSettingInterfaceRed

IPFireSettingInterfaceRedDHCP

9.11 设置DNS和网关地址

IPFireSettingInterfaceGreen

IPFireSettingGreenInterfaceIPAddress

9.12 最后是否为内网启用DHCP功能

IPFireSettingGreenInterfaceDHCPServerConfiguration

十. 完成后,用浏览器访问https://green接口地址:444,用admin帐号登陆.Red网卡的地址是不能通过外网来访问的。

IPFireMainPage

参考链接