访问 android 应用程序中的资产文件
Acces to Assets file in android application
我的申请有问题。
我尝试访问 Assets 文件夹并在目录中下载一些 PDF 文件。
当我在我的 galaxy S9 (API 28) 上尝试代码时,它工作得很好。
但是当我在我的 Galaxy S2 选项卡 (API24) 上尝试代码时,没有任何反应。
我使用此代码访问和下载 pdf 文件:
public void copyAssets(Context context)
{
DownloadComplete = false;
Log.d("tag", "Here 1 ?");
AssetManager assetManager = context.getAssets();
Log.d("tag", "Here 2 ?");
String[] files = null;
Log.d("tag", "Here 3?");
try
{
files = assetManager.list(resAventure + "/");
Log.d("tag", "Here 4?");
} catch (IOException e) {
Log.d("tag", "Failed to get asset file list.", e);
}
if (files != null) for (String filename : files)
{
Log.d("tag", "Here 5?");
InputStream in = null;
OutputStream out = null;
try {
Log.d("tag", "Here 6?");
in = assetManager.open(resAventure + "/" + filename);
out = new FileOutputStream(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Download/Escape/" + resAventure + "/" + filename);
copyFile(in, out);
Toast.makeText(getApplicationContext(), "Téléchargement effectué sur l'appareil", Toast.LENGTH_LONG).show();
DownloadComplete = true;
} catch(IOException e) {
Log.d("tag", "Failed to copy asset file: " + filename , e);
}
finally
{
if (in != null)
{
try
{
in.close();
in = null;
} catch (IOException e)
{
Log.d("tag", "Failed A", e);
}
}
if (out != null)
{
try {
out.flush();
out.close();
out = null;
} catch (IOException e)
{
Log.d("tag", "Failed B", e);
}
}
}
}
}
public void copyFile(InputStream in, OutputStream out) throws IOException
{
byte[] buffer = new byte[1024];
int read;
while((read = in.read(buffer)) != -1){
out.write(buffer, 0, read);
}
}
在API28 一切正常。但是在 API24 我只有在日志中:
D/ViewRootImpl@45de4c3[documents]: ViewPostImeInputStage processPointer 1
D/tag: Here 1 ?
Here 2 ?
Here 3?
D/tag: Here 4?
D/ViewRootImpl@45de4c3[documents]: ViewPostImeInputStage processPointer 0
资产文件夹的两个 API 之间有区别吗?
我不明白为什么它只工作一次...
somoene 可以帮我吗?
找到了
我替换:
文件 = assetManager.list(resAventure + "/");
经过
文件 = assetManager.list(resAventure);
我的申请有问题。 我尝试访问 Assets 文件夹并在目录中下载一些 PDF 文件。
当我在我的 galaxy S9 (API 28) 上尝试代码时,它工作得很好。 但是当我在我的 Galaxy S2 选项卡 (API24) 上尝试代码时,没有任何反应。
我使用此代码访问和下载 pdf 文件:
public void copyAssets(Context context)
{
DownloadComplete = false;
Log.d("tag", "Here 1 ?");
AssetManager assetManager = context.getAssets();
Log.d("tag", "Here 2 ?");
String[] files = null;
Log.d("tag", "Here 3?");
try
{
files = assetManager.list(resAventure + "/");
Log.d("tag", "Here 4?");
} catch (IOException e) {
Log.d("tag", "Failed to get asset file list.", e);
}
if (files != null) for (String filename : files)
{
Log.d("tag", "Here 5?");
InputStream in = null;
OutputStream out = null;
try {
Log.d("tag", "Here 6?");
in = assetManager.open(resAventure + "/" + filename);
out = new FileOutputStream(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Download/Escape/" + resAventure + "/" + filename);
copyFile(in, out);
Toast.makeText(getApplicationContext(), "Téléchargement effectué sur l'appareil", Toast.LENGTH_LONG).show();
DownloadComplete = true;
} catch(IOException e) {
Log.d("tag", "Failed to copy asset file: " + filename , e);
}
finally
{
if (in != null)
{
try
{
in.close();
in = null;
} catch (IOException e)
{
Log.d("tag", "Failed A", e);
}
}
if (out != null)
{
try {
out.flush();
out.close();
out = null;
} catch (IOException e)
{
Log.d("tag", "Failed B", e);
}
}
}
}
}
public void copyFile(InputStream in, OutputStream out) throws IOException
{
byte[] buffer = new byte[1024];
int read;
while((read = in.read(buffer)) != -1){
out.write(buffer, 0, read);
}
}
在API28 一切正常。但是在 API24 我只有在日志中:
D/ViewRootImpl@45de4c3[documents]: ViewPostImeInputStage processPointer 1
D/tag: Here 1 ?
Here 2 ?
Here 3?
D/tag: Here 4?
D/ViewRootImpl@45de4c3[documents]: ViewPostImeInputStage processPointer 0
资产文件夹的两个 API 之间有区别吗? 我不明白为什么它只工作一次...
somoene 可以帮我吗?
找到了
我替换: 文件 = assetManager.list(resAventure + "/"); 经过 文件 = assetManager.list(resAventure);