1. android下权限
网络访问
写SD卡
读SD卡
2. 保存数据到手机内存
1)文件存储到/data/data/com.example.qq/files下:
this.getFilesDir().getPath() 返回一个文件夹 -- /data/data/包名/files
2)将文件存到/data/data/com.example.qq/cache下
使用this.getCacheDir().getPath()
3. 保存数据到SDCard
用API获取SDCard的路径(不同手机SDCard文件夹位置不同)
Environment.getExternalStorageDirectory()
判断当前手机是否有SD卡
Environment.getExternalStorageState()
--Environment.MEDIA_MOUNTED --Environment.MEDIA_REMOVED
获得手机内存及SD卡的内存状态
4. 权限
openFileOutput("aa.txt",mode) --/data/data/包名/files/aa.txt
mode -- 文件权限
Context.MODE_PRIVATE
Context.MODE_WORLD_READABLE
Context.MODE_WORLD_WRITABLE
Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITABLE
FileExploer中 Permission下 _ _ _ _ _ _ _ _ _ _
第1位:代表文件的类型(d代表文件夹, -代表文件,l代表挂载某一个文件)
第2~4位:rw- 代表的是当前用户的权限 110 = 6
rwx x代表可执行
第5~7位:当前用户所在组的其他组员的权限
第8~10位:其他所有人的权限 ---没有任何权限 r--可读 -w-可写 rw-可读可写
可以通过linux shell改变权限
Android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给它一个userid
当该应用要去访问其他资源比如文件的时候,就需要userid匹配。
默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的
位于/data/data/<package name>/files,其他程序是无法访问的
除非在创建的时候制定了Context.MODE_WORLD_READABLE等属性
5. SharedPreference存储路径
-- /data/data/<package name>/Shared_prefs
对于软件配置参数的保存
如果是window软件通常我们会采用ini文件进行保存,
如果是j2se应用,我们会采用properties属性文件或者xml进行保存。
如果是Android应用,提供了一个SharedPreferences类,特别适合用于保存软件配置参数。
6. XML解析的方法
1)DOM解析 DOM解析占内存,文件一下子读入内存,再一点一点解析
2)SAX解析 SAX解析是一点一点解析,但是不能停,要解析完成
3)PULL解析 PULL解析是一点一点解析,可以停止
7. XML的序列化和解析(PULL方法)
1)XML的序列化
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(fos,"utf-8");
serializer.startDocument("utf-8", true); // 写开始
serializer.startTag(null, "persons");
for (Person person : personList) {
serializer.startTag(null, "person");
serializer.attribute(null, "id",
Integer.toString(person.getId()));
serializer.startTag(null, "name");
serializer.text(person.getName());
serializer.endTag(null, "name");
serializer.startTag(null, "age");
serializer.text(String.valueOf(person.getAge()));
serializer.endTag(null, "age");
serializer.endTag(null, "person");
}
serializer.endTag(null, "persons");
serializer.endDocument(); // 写结束
2)XML的Pull解析方法
XmlPullParser parser = Xml.newPullParser();
parser.setInput(fis, "utf-8");
int eventType = parser.getEventType();
List<Person> personList = null;
Person person = null;
while (eventType != XmlPullParser.END_DOCUMENT) {
String tagName = parser.getName();
switch (eventType) {
case XmlPullParser.START_TAG:
if ("persons".equals(tagName)) {
personList = new ArrayList<>();
} else if ("person".equals(tagName)) {
person = new Person();
String id = parser.getAttributeValue(null, "id");
// String --> int
person.setId(Integer.parseInt(id));
} else if ("name".equals(tagName)) {
person.setName(parser.nextText());
} else if ("age".equals(tagName)) {
person.setAge(Integer.parseInt(parser.nextText()));
}
break;
case XmlPullParser.END_TAG:
if ("person".equals(tagName)) {
personList.add(person);
}
break;
default:
break;
}
// 获得下一个事件类型
eventType = parser.next();
}
return personList;
8. Android中想让一个元素滚动
只需要将<ScrollView>元素</ScrollView>