如何将文件添加到Android项目,将其部署到设备,然后打开它?

时间:2010-09-08 00:53:27

标签: android eclipse file-io android-manifest

我在Eclipse(Helios)中有一个Android(2.2)项目。我想在项目中添加一个MP3文件,以便将MP3文件与应用程序一起部署到设备上。

然后我想将文件作为File对象打开,这意味着我需要知道设备上文件的完整路径(?),但我不知道路径是怎样的在Android中指定。

2 个答案:

答案 0 :(得分:12)

显然,Froyo中存在阻止WAV播放的错误。
音频文件应放在项目的“res / raw”目录中。然后使用id播放它(或尝试播放它)

MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1);
mp.start();

信息:http://developer.android.com/guide/topics/media/index.html
示例(mp3):http://www.helloandroid.com/tutorials/musicdroid-audio-player-part-i

答案 1 :(得分:2)

好的,我在另一个项目的来源上看到了这个,所以我并没有真正想出来,但它确实有效。

要将任何文件添加到项目中,以后能够使用它,您需要将文件(二进制文件,xml或其他文件)放在项目的 assets 文件夹中。

在这个例子中,我将资产复制到文件系统,以便稍后我可以像任何其他用户文件一样访问它。您也可以直接访问资产,请查看文档中的Resources

public void copyfile(String fileName)
      {
        if (!new File(fileName).exists()){
            try
            {
              InputStream localInputStream = getAssets().open(fileName);
              FileOutputStream localFileOutputStream = getBaseContext().openFileOutput(fileName, MODE_PRIVATE);

              byte[] arrayOfByte = new byte[1024];
              int offset;
              while ((offset = localInputStream.read(arrayOfByte))>0)
              {
                localFileOutputStream.write(arrayOfByte, 0, offset);
              }
              localFileOutputStream.close();
              localInputStream.close();
              // The next 3 lines are because I'm copying a binary that I plan
              // to execute, so I need it to have execute permission.
              StringBuilder command = new StringBuilder("chmod 700 ");
              command.append(basedir + "/" + paramString);
              Runtime.getRuntime().exec(command.toString());
              Log.d(TAG, "File " + paramString + " copied successfully.");
            }
            catch (IOException localIOException)
            {
                localIOException.printStackTrace();
                return;
            }
        }
        else
            Log.d(TAG, "No need to copy file " + paramString);
      }

我相信可能有更好的方法来复制文件,但是这个可以工作,并且即使从onCreate调用它也不会减慢我的应用程序(我复制的所有文件都低于100kb,所以对于更大的文件,你可能想要一个单独的线程)

以下是获取文件路径的方法:

String path = getBaseContext().getFilesDir().getAbsolutePath();

如果你想把文件写到另一条路径,比如说“/ sdcard / DCIM / appPictures”,我相信你可以使用这段代码:

FileOutputStream outFile = FileOutputStream("/sdcard/DCIM/appPictures/" + fileName);

然后像上面的例子一样逐字节地复制它。