android的基础学习
来源:互联网 发布:js获取数组索引值 编辑:程序博客网 时间:2024/05/17 00:14
今天看视频主要学习了android下文件访问的权限和android的存储。
首先,android下文件访问权限Permission:
文件权限
读(R)
写(W)
执行(X)
对应数字
4
2
1
第0位
第1~3位(当前用户)
第4~6(当前用户所在的分组)
第7~9(其他的用户)
对应权限数字相加
-代表文件(0)r w x
r w x
r w x
d代表目录(1)
4 2 0
4 0 0
0 0 0
640
4 2 1
4 0 1
4 0 1
755
修改文件权限的方法暂时学到了两种:一种是通过代码:out = context.openFileOutput(filename, Context.MODE_PRIVATE);
一种是通过cmd命令:将private.txt文件修改为全可读可写可执行
adb shell 找到对应文件 chmod 666 private.txt
其次,
android的存储分为两个方面,一部分是手机内部存储空间(可以理解成一块微硬盘/data/data),另一部分就是外部存储空间SD卡(sdcard)。将eclipse调成DDMS下FileExplorer中就可找到。
可以通过代码来获取SD卡的空间:
package com.example.application;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import com.example.applicationsdstorage.R;
import android.os.Bundle;
import android.os.Environment;
import android.os.StatFs;
import android.app.Activity;
import android.text.format.Formatter;
import android.view.Menu;
import android.view.TextureView;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView) findViewById(R.id.tv);
File path=Environment.getExternalStorageDirectory();
StatFs stat=new StatFs(path.getPath());
long blockSize=stat.getBlockSize();
long totalBlocks=stat.getBlockCount();
long availableBlocks=stat.getAvailableBlocks();
long totalSize=blockSize*totalBlocks;
long availSize=availableBlocks*blockSize;
String totalString=Formatter.formatFileSize(this, totalSize);
String avaliString=Formatter.formatFileSize(this, availSize);
tv.setText("总内存:"+totalString+"\n"+"可用内存"+avaliString+"\n"+getRomSpaceInfo());
}
public String getRomSpaceInfo(){
File path=Environment.getDataDirectory();
StatFs stat=new StatFs(path.getPath());
long blockSize=stat.getBlockSize();
long totalBlocks=stat.getBlockCount();
long availableBlocks=stat.getAvailableBlocks();
long totalSize=blockSize*totalBlocks;
long availSize=availableBlocks*blockSize;
String totalString=Formatter.formatFileSize(this, totalSize);
String avaliString=Formatter.formatFileSize(this, availSize);
return "手机总空间:"+totalString+"\n"+"手机可用内存"+avaliString;
}
}
在用户登录注册环节,可以利用sharedPreference保存用户信息来完成记住密码信息的功能。
代码如下:
package com.example.application;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Map;
import com.example.application.LoginService.LoginService;
import com.example.applicationsharepreference.R;
import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private static final String TAG="MainActivity";
private EditText et_userid;
private EditText et_password;
private CheckBox cb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_userid=(EditText) this.findViewById(R.id.userid);
et_password=(EditText) this.findViewById(R.id.password);
cb=(CheckBox) this.findViewById(R.id.cb);
SharedPreferences sPreferences=getSharedPreferences("config", MODE_PRIVATE);
String userid=sPreferences.getString("username", "");
et_userid.setText(userid);
String password=sPreferences.getString("password", "");
et_password.setText(password);
}
public void userLogin(View view)
{
String userid=et_userid.getText().toString().trim();
String password=et_password.getText().toString().trim();
Map<String, String> map=LoginService.getSaveUserInfo(this);
try {
if(TextUtils.isEmpty(userid)||TextUtils.isEmpty(password)){
Toast.makeText(this, "用户名或者密码不能为空",Toast.LENGTH_LONG).show();
}else {
if(cb.isChecked()){
Log.i(TAG, "需要保存用户名密码");
LoginService.saveUserInfo(this, userid, password)
;
Toast.makeText(this, "保存用户信息成功", Toast.LENGTH_LONG).show();
}
if("ljr".equals(userid)&&"123".equals(password))
{
Toast.makeText(this, "登录成功", Toast.LENGTH_LONG).show();
}else {
Toast.makeText(this, "密码用户错误",Toast.LENGTH_LONG).show();
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(this, "失败", Toast.LENGTH_LONG).show();
}
}
}
package com.example.application.LoginService;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.jar.Attributes.Name;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.graphics.AvoidXfermode.Mode;
import android.os.Environment;
import android.widget.Toast;
public class LoginService {
/*
* 保存用户名和密码的业务流程
*
* @param context 上下文
*
* @param userid用户名
*
* @param password密码
*
* @return true 保存成功 false保存失败
*/
public static void saveUserInfo(Context context, String userid,
String password) {
SharedPreferences sPreferences=context.getSharedPreferences("config", context.MODE_PRIVATE);
Editor editor=sPreferences.edit();
editor.putString("username", userid);
editor.putString("password", password);
editor.putBoolean("open", true);
editor.putInt("count", 23);
editor.putFloat("pi", (float) 3.21);
editor.commit();
}
public static Map<String, String> getSaveUserInfo(Context context) {
File file = new File("/sdcard/info.txt");
try {
FileInputStream fis=new FileInputStream(file);
BufferedReader br=new BufferedReader(new InputStreamReader(fis));
String str=br.readLine();
//zhangsan##123
String[] infos=str.split("##");
Map<String, String> map=new HashMap<String, String>();
map.put("userid", infos[0]);
map.put("password", infos[1]);
return map;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
}
用代码生成xml文件,这里演示的是备份手机中的短信内容到xml文件,采用了两种方式
代码入下:
package com.example.genXML;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import org.xmlpull.v1.XmlSerializer;
import com.example.genXML.domain.smsInfo;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.util.Xml;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;
public class MainActivity extends Activity {
private List<smsInfo> smsInfos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
smsInfos=new ArrayList<smsInfo>();
Random random=new Random();
long number= 1350000000;
for(int i=0;i<10;i++)
smsInfos.add(new smsInfo(System.currentTimeMillis(),1,"duanxinneirong"+i,Long.toString(number+i),i));
}
/*
* 备份手机的短信
*/
public void backupSMS1(View view){
StringBuilder sbBuilder=new StringBuilder();
sbBuilder.append("<smss>");
for(smsInfo info:smsInfos){
sbBuilder.append("<sms>");
sbBuilder.append("<address>");
sbBuilder.append(info.getAddress());
sbBuilder.append("</address>");
sbBuilder.append("<type>");
sbBuilder.append(info.getType());
sbBuilder.append("</type>");
sbBuilder.append("<body>");
sbBuilder.append(info.getAddress());
sbBuilder.append("</body>");
sbBuilder.append("<date>");
sbBuilder.append(info.getTime());
sbBuilder.append("</date>");
}
sbBuilder.append("</smss>");
try {
File file=new File(Environment.getExternalStorageDirectory(),"backup.xml");
FileOutputStream foStream=new FileOutputStream(file);
foStream.write(sbBuilder.toString().getBytes());
foStream.close();
Toast.makeText(this, "备份成功", Toast.LENGTH_LONG).show();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(this, "备份失败", Toast.LENGTH_LONG).show();
}
}
public void backupSMS2(View view){
try {
XmlSerializer serializer=Xml.newSerializer();//序列化器
File file=new File(Environment.getExternalStorageDirectory(),"backup2.xml");
FileOutputStream os=new FileOutputStream(file);
serializer.setOutput(os, "utf-8");
serializer.startDocument("utf-8", true);
serializer.startTag(null, "smss");
for(smsInfo info:smsInfos){
serializer.startTag(null, "sms");
serializer.attribute(null, "id", info.getId()+"");
serializer.startTag(null, "body");
serializer.text(info.getBody());
serializer.endTag(null, "body");
serializer.startTag(null, "address");
serializer.text(info.getAddress());
serializer.endTag(null, "address");
serializer.startTag(null, "date");
serializer.text(info.getTime()+"");
serializer.endTag(null, "date");
serializer.startTag(null, "type");
serializer.text(info.getType()+"");
serializer.endTag(null, "type");
serializer.endTag(null, "sms");
}
serializer.endTag(null, "smss");
serializer.endDocument();
os.close();
Toast.makeText(this, "备份成功", Toast.LENGTH_LONG).show();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(this, "备份失败", Toast.LENGTH_LONG).show();
}
}
}
package com.example.genXML.domain;
public class smsInfo {
private long time;
private int type;
private String body;
private String address;
private int id;
public smsInfo() {
}
public smsInfo(long time, int type, String body, String address,int id) {
super();
this.time = time;
this.type = type;
this.body = body;
this.address = address;
this.id=id;
}
public long getTime() {
return time;
}
public void setTime(long time) {
this.time = time;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
- android的基础学习
- 学习android需要的基础
- android基础--意图的学习
- 学习android需要的基础
- Android 基础控件的学习
- android布局的基础学习
- 学习Android的Java基础
- Android BroadcastReceiver的基础学习
- android学习1 android应用的基础
- Android学习所需的java基础
- 学习android需要的基础 (转)
- android 基础学习(3)-----activity的生命周期
- 关于Android零基础学习的思考
- android基础学习<二>--->Activity的来龙去脉
- android基础之fragment的学习
- android基础学习之shape的用法
- android基础学习之edit的详解
- Android基础学习笔记:Activity的生命周期
- Hive学习笔记
- 培养自己的核心竞争力
- 软考复习之路—从瀑布模型到极限编程,敏捷开发
- CentOS 5.9+ 编译newlisp
- Storyboard里面的几种Segue区别及视图的切换:push,modal,popover,replace和custom
- android的基础学习
- PHP基础加强(第六天)
- LeetCode--Reverse Integer
- 【剑指offer】二进制中1的个数
- 每天学习一点string.h
- hdu1018
- Android 网络编程 API笔记 - java.net 包相关 接口 api
- 基于C++的串口通讯//使用MsComm控件//SetRThreshold()函数的使用,根据数据数量触发端口
- HUD1711