0
掃描所有文件夾和外部存儲文件中查找所有APK文件,併爲每個APK文件,獲取信息並顯示進度。
我怎麼做的,到目前爲止
我最初的想法是,這是一個簡單的事情來實現。但是,好吧......即使是這樣的作品,它的表現也不如預期。
我使用AsyncTask在後臺執行掃描。這裏是我該怎麼辦:
private ArrayList<String> sdcardAppsPath;
protected class ScanTask extends AsyncTask<Context, Scanner, ArrayList<Apk>> {
private ArrayList<Apk> sdcardApps;
@Override
protected ArrayList<App> doInBackground(Context... params) {
visitAllDirsAndFiles(Environment.getExternalStorageDirectory());
for (String path : sdcardAppsPath) {
//get info about apk file and
publishProgress(values) //show in some textviews number of files scanned, total files
sdcardApps.add(currentScannedItemFoundInfo);
}
return sdcardApps
}
@Override
protected void onProgressUpdate(Scanner... values) {
super.onProgressUpdate(values);
// update some textView texts based on values
}
}
而且
// Process all files and directories under dir
public void visitAllDirsAndFiles(File dir) {
if (dir != null) {
if (dir.getAbsoluteFile().toString().endsWith(".apk")) {
sdcardAppsPath.add(dir.getAbsoluteFile().toString());
}
if (dir.isDirectory()) {
String[] children = dir.list();
if (children != null) {
for (int i = 0; i < children.length; i++) {
visitAllDirsAndFiles(new File(dir, children[i]));
}
}
}
}
}
正如你可以看到vistitAllDirsAndFiles
後,我得到我所需要的所有APK文件的ArrayList<String>
,這樣我就可以檢查每一個我想要的。缺點是,如果卡上有許多文件,並且在找到路徑時應用程序顯示沒有進度,則構建此sdcardAppsPath
可能需要很長時間。
我想實現
我希望能夠在doInBackground
以某種方式對每個找到的文件,得到我需要的信息,更新進度,然後用掃描繼續什麼。任何想法如何更新我的代碼來這樣工作?
這是完整的代碼清單?你不需要'onProgressUpdate'嗎? –
沒有相關的部分onProgressUpdate ... – Alin
其實,現在我更仔細地看它,如果你想在搜索文件時更新進度,你不應該在你的'visitAllDirsAndFiles'方法中調用'publishProgress'? –