私の Android アプリでは、SDCARD にコピーする必要があるファイルを /assets フォルダーにパッケージ化しました。アセット フォルダーの内容を一覧表示すると、String[]
「画像」、「サウンド」、「webkit」、および「kioskmode」が表示されますが、手動でアセット フォルダーに追加されたファイルは表示されません。
私のコードはここにあります:
private void copyAsset () {
AssetManager am = getApplicationContext().getAssets();
String[] files = null;
try {
files = am.list("");
} catch (IOException e) {
}
for (String filename : files) {
if (filename.equals("images") || filename.equals("kioskmode") ||
filename.equals("sounds") || filename.equals("webkit")) {
Log.i(TAG, "Skipping folder " + filename);
continue;
}
InputStream in = null;
OutputStream out = null;
try {
in = am.open(filename);
File outFile = new File(Environment.getExternalStorageDirectory().getPath(), filename);
out = new FileOutputStream(outFile);
copyFile(in, out);
in.close();
in = null;
out.flush();
out.close();
out = null;
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG, "Error copying asset ", e);
}
}
}
これがアプリの 2 番目のクラスであり、 MainActivity を使用して呼び出されることに違いはありIntent showHelper = new Intent(this, HelperManager.class);
startActivity(showHelper);
ますか?
ビットの有無にかかわらず2 行目 ( AssetManager am = ...
) をgetApplicationContext()
試し、ファイルを /assets のサブフォルダーに移動しようとfiles = am.list("")
し、先頭と末尾のスラッシュを試しました。サブフォルダーを使用すると、コードの実行時にファイル配列が空になります(files = am.list("");
行にブレークポイントを設定し、実行時に検査しました。奇妙なことに、最初にコードを書いたときに一度だけ機能しましたが、さらにテストするために、電話の /sdcard フォルダーからファイルを削除しました, そして、ファイルがまだ資産フォルダーにあるにもかかわらず、それは機能しませんでした. それが問題であれば、私は Android Studio を使用しています. ありがとう