将资产移至/ data / data / APP_NAME /文件

时间:2011-05-02 15:13:35

标签: android import device assets

快速参考我所读到的内容 http://thedevelopersinfo.com/2009/11/17/using-assets-in-android/

http://www.wiseandroid.com/post/2010/06/14/Android-Beginners-Intro-to-Resources-and-Assets.aspx

还有更多,但作为一个newb只能发布2.

在我的应用程序中,如果用户决定在root设备上执行此操作,则会有一个重新启动到引导加载程序的按钮。我有一个名为“rebo​​ot”的重启二进制文件,它允许命令运行,它位于/ assets /中。使用上面的方法我似乎无法“重启”移动甚至在我的apk的/ data / data /中创建目录“files”。我的问题是,是否有一个更好的指导,让我在这个主题上学习,或者这些是最好的,我只是倾向于理解它。或者,如果您有其他一些示例代码,我可以阅读并尝试理解将是完美的。谢谢。

添加了我正在做的事情的样本

$ public static String moveReboot = "/data/data/com.DPE.MuchSuck/Files";
public static String reboot = "file:///android_asset/reboot";
public static Context myContext;

@Override
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    try {
        moveFile();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
$ public void moveFile() throws IOException {
  AssetManager assetManager = getAssets();
  InputStream myInput = assetManager.open(reboot);
  String outFileName = moveReboot + reboot;
  OutputStream myOutput = new FileOutputStream(outFileName);
  byte[] buffer = new byte [1024];
  int length;
  while ((length = myInput.read(buffer))>0){
   myOutput.write(buffer, 0, length);

  }
  myOutput.flush();
  myOutput.close();
  myInput.close();

运行apk时,“文件”中没有显示任何内容,“文件甚至不显示”。

1 个答案:

答案 0 :(得分:2)

道格

看起来你的“outFileName”不会包含一个好的文件名。 尝试使用getExternalFilesDir()来获取SDRAM的路径。

请参阅:http://developer.android.com/reference/android/content/Context.html#getExternalFilesDir%28java.lang.String%29

编辑...

doug,这是我的实现

private void copyAssetToSDRAM(String strFilename)
{
    try
    {
        //complete path to target file
        File fileTarget = new File(Environment.getExternalStorageDirectory(), strFilename);

        //data source stream
        AssetManager assetManager = ApplicationContext.getContext().getAssets();
        InputStream istr = assetManager.open(strFilename);

        //data destination stream
        //NOTE: at this point you'll get an exception if you don't have permission to access SDRAM ! (see manifest)
        OutputStream ostr = new FileOutputStream(fileTarget);

        byte[] buffer = new byte[1024];
        int length;
        while ((length = istr.read(buffer))>0)
        {
            ostr.write(buffer, 0, length);
        }
        ostr.flush();
        ostr.close();
        istr.close();

    }
    catch(Exception e)
    {
        Toast.makeText(ApplicationContext.getContext(), "File-Copy Error: "+strFilename, Toast.LENGTH_LONG).show();
        e.printStackTrace();
    }
}

使用它,执行此操作:

        if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
        {
            copyAssetToSDRAM("myfile.png");
        }
        else
        {
            Toast.makeText(ApplicationContext.getContext(), "Unable to copy images. NO SDRAM", Toast.LENGTH_LONG).show();
        }