用过ActivityManager的童鞋估计都知道,可以从ActivityManager里面可以获取到当前运行的所有任务,所有进程和所有服务,这是任务管理器的核心。
那么,从里面我们可以发掘点什么出来吗?
仔细看getRunningTasks的文档,里面说获取的是系统中"running"的所有task,"running"状态包括已经被系统冻结的task。而且返回的这个列表是按照顺序排列的,也就是说第一个肯定比第二个后运行。
getRunningTasks有个整型参数,表示返回列表的最大个数。那么,我们如果把1作为参数给进去,那么他返回的task就是当前运行的那个task,然后从task中获取到最顶层的activity,这个activity就是当前显示给用户的那个activity了。
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); ComponentName cn = am.getRunningTasks(1).get(0).topActivity; Log.d("", "pkg:"+cn.getPackageName()); Log.d("", "cls:"+cn.getClassName());
至于这个能做什么,嘿嘿,我相信你知道的。
手机的存储空间分俩种,一种是手机自带的,另一种是SD卡,(外存)
文件保存
FileOutputStream fOutputStream =
context.openFileOutput(filename, Context.MODE_PRIVATE);
fOutputStream.write(content.getBytes());
openFileOutput()方法的第一个参数用于指定文件名称,不能包含路径分隔符"/",如果文件不存在,Android会自动创建它,创建的文件保存在/data/data/<package name>files目录
openFileOutput()方法的第二个参数用于指定操作模式,有四种模式,分别为:
Context.MODE_PRIVATE=0
Context.MODE_APPEND =32768
Context.MODE_WORLD_READABLE=1
Context.MODE_WORLD_WRITEABLE=2
文件读取
public String readFile(String filename)throws Exception{
FileInputStream input = context.openFileInput(filename);
//定义的缓冲区
byte[] bytes = new byte[1024];
int len = 0;
//写入文件到内存
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
while((len=input.read(bytes))!=-1){
//把缓冲区中 的数据从0位置开始,读取len长度,写入内存
outputStream.write(bytes,0,len);
}
byte[] data = outputStream.toByteArray();
outputStream.close();
input.close();
return new String(data);
}
文件操作模式
Context.MODE_PRIVATE,为默认操作模式,代表文件是私有数据,只能被应用本身访问,在改模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中,可以使用Context.MODE_APPEND
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否具有权限读写该文件。
MOED_WORLD_READABLE:表示当前文件可以被其他应用读取
MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入
快速定位文件,在activity中使用this.getFilesDir()
文件在SD卡存储
android2.2之前,SD卡在/sdcard目录
android2.2和之后,SD卡在/mnt/sdcard
使用activity的openFileOutput()方法保存文件,文件是存在手机空间上,一般手机的存储空间不是很大,存放些小文件还可以,如果要存储视频等大文件,是不可行的,对于像视频这样的大文件,我们存储在SD卡
在程序中访问SD卡,需要加入权限
<!--在SD卡中创建于删除文件的权限-->
<android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!--往SD卡中写入数据权限-->
<android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
//判断是否存在SD卡,是否可写
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//保存
fileService.saveToSDCard(filenameString, context);
}
public void saveToSDCard(String filename,String content)throws Exception{
File file = new File(Environment.getExternalStorageDirectory(),filename);
FileOutputStream fOutputStream =
new FileOutputStream(file);
fOutputStream.write(content.getBytes());
fOutputStream.close();
}
默认情况下,sun 的模拟器不支持触摸事件,修改方法为,找到 C:\WTK2.5.2\wtklib\devices\DefaultColorPhone\DefaultColorPhone.properties 文件,用记事本打开,Ctrl + F 搜索 “touch_screen” 将 touch_screen=false 改为 touch_screen=true,即可。