public class CopyAppActivity extends Activity {
/** Called when the activity is first created. */
private static final String outFile = "sdcard/backups/"; //备份apk目录
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
copyFiles();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
setContentView(R.layout.main);
}
static String getFileName(String fullName) {
if (fullName == null) {
return null;
}
int idx = fullName.lastIndexOf('/');
if (idx == -1) {
return fullName;
}
return fullName.substring(idx + 1);
}
public void copyFiles() throws Exception {
final PackageManager pm = getPackageManager();
List<ApplicationInfo> allApps = pm.getInstalledApplications(0);
final List<ApplicationInfo> filteredApps = filterApps(allApps);
for (int i = 0, size = filteredApps.size(); i < size; i++) {
ApplicationInfo info = filteredApps.get(i);
String src = info.sourceDir;//获取apk所在路径
if (src != null) {
FileStraeamCopy(src,outFile);
}
}
}
/*
* 获取用户安装的软件list
*/
public static List<ApplicationInfo> filterApps(List<ApplicationInfo> apps) {
if (apps == null || apps.size() == 0) {
return apps;
}
List<ApplicationInfo> userApps = new ArrayList<ApplicationInfo>();
for (int i = 0, size = apps.size(); i < size; i++) {
ApplicationInfo ai = apps.get(i);
if ((ai.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
userApps.add(ai);
}
}
return userApps;
}
/**
* io拷贝
*
* @param inFile
* 源文件
* @param outFile
* 目标文件
* @return
* @throws Exception
*/
public static void FileStraeamCopy(String inFile, String outFile)
throws Exception {
try {
File file = new File(outFile); /* 创建临时文件 */
if (!file.exists())// 如果文件夹不存在创建
{
file.mkdir();
}
File files = new File(outFile + getFileName(inFile));// 创建文件
file.getAbsolutePath();
/* 将文件写入暂存盘 */
FileOutputStream fos = new FileOutputStream(files);
byte buf[] = new byte[128];
InputStream fis = new BufferedInputStream(new FileInputStream(
inFile), 8192 * 4);
do {
int numread = fis.read(buf);
if (numread <= 0) {
break;
}
fos.write(buf, 0, numread);
} while (true);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}