tags:

views:

92

answers:

1

This is probably a really dumb/noob like question but what is the best method to have an .apk file that when installed drops a zip file onto the sd card, in a specific directory, from the assets or raw folder?

+2  A: 

I have an app that needs to do that and what I do is check if what I need is on the SDCard when I run, that way I can replace it if the user deletes it. Here's my code for that:

void copyAssets()
{
    String[] files;
    try
    {
        files = this.getResources().getAssets().list("");
    }
    catch (IOException e1)
    {
        return;
    }

    if(!mWorkingPath.exists())
    {
        if(!mWorkingPath.mkdirs())
        {
            new AlertDialog.Builder(this)
                .setTitle(R.string.ERROR)
                .setMessage(R.string.FAILED_DIR_CREATE)
                .setPositiveButton(android.R.string.ok, new OnClickListener(){
                    @Override
                    public void onClick(DialogInterface dialog, int which)
                    {
                        dialog.dismiss();
                    }
                })
                .create()
                .show();
        }
    }

    for(int i = 0; i < files.length; i++)
    {
        try
        {
            String fileName = files[i];

            if(fileName.compareTo("images") == 0 ||
               fileName.compareTo("sounds") == 0 ||
               fileName.compareTo("webkit") == 0)
            {
                continue;
            }

            File outFile = new File(mWorkingPath, fileName);
            if(outFile.exists()) continue;

            InputStream in = getAssets().open(fileName);
            OutputStream out = new FileOutputStream(outFile);

            // Transfer bytes from in to out
            byte[] buf = new byte[1024];
            int len;
            while ((len = in.read(buf)) > 0)
            {
                out.write(buf, 0, len);
            }

            in.close();
            out.close();
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}
CaseyB