【问题标题】:Files from res file to sdcard on androidandroid上从res文件到sdcard的文件
【发布时间】:2011-05-10 00:28:34
【问题描述】:

您好,我正在尝试将我的 android 应用程序的 res/raw 文件夹中的文件复制到手机的 sdcard 上,以便将它们设置为铃声。以下是我的应用程序到目前为止的内容:

package com.wochstudios.ringtonetest;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.app.*;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.res.*;
import android.app.Activity;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class setRingtone extends Activity {
Button setBtn;
TextView result;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    setBtn = (Button) findViewById(R.id.button1);
    result = (TextView) findViewById(R.id.textView1);

    setBtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            //Attempt to make file out on raw element
            setRing();
        }
    });
}
public void setRing(){
    File newSoundFile = new File("/sdcard/media/ringtone", "fortkickass.mp3");
    Uri mUri =          Uri.parse("android.resource://com.wochstudios.ringtonetest/R.raw.fortkickass");

    ContentResolver mCr = getContentResolver();

    AssetFileDescriptor soundFile;

    try {
           soundFile= mCr.openAssetFileDescriptor(mUri, "r");
       } catch (FileNotFoundException e) {
           soundFile=null;   
       }


       try {
          byte[] readData = new byte[1024];
          FileInputStream fis = soundFile.createInputStream();
          FileOutputStream fos = new FileOutputStream(newSoundFile);
          int i = fis.read(readData);

          while (i != -1) {
            fos.write(readData, 0, i);
            i = fis.read(readData);
          }

          fos.close();
       } catch (IOException io) {
       }





}

}

一旦遇到 setRing 方法的第二次尝试捕获就会崩溃,我从之前发布的问题中得到了这段代码,但我再也找不到链接了,任何帮助都会很棒

编辑

我鬼混,发现 Assetfiledescriptor soundFile 是空的,所以是什么导致了崩溃,所以现在我需要弄清楚为什么它是空的。

【问题讨论】:

    标签: android file sd-card


    【解决方案1】:

    说明:

    第一个 try/catch 块会:

    soundFile=null; 
    

    如果读取失败。

    然后,在第二个中,您在以下位置使用声音文件:

    FileInputStream fis = soundFile.createInputStream();
    

    您正在读取 null 因为第一次尝试失败

    编辑:

    改用这个

    InputStream ins = context.getResources().openRawResource (R.raw.FILENAME)
    byte[] buffer = new byte[ins.available()];
    ins.read(buffer);
    ins.close();
    String filename = Environment.getExternalStorageDirectory().toString()+File.separator+FILENAME;
    FileOutputStream fos = new FileOutputStream(filename);
    fos.write(buffer);
    fos.close();
    

    【讨论】:

    • 我得到了 IOexception @ALeadam ' try { InputStream ins = this.getResources().openRawResource (R.raw.fortkickass);字节[] 缓冲区 = 新字节[ins.available()]; ins.read(缓冲区); ins.close();字符串文件名 = Environment.getExternalStorageDirectory().toString()+File.separator+"fortkickass.mp3";结果.setText(文件名); FileOutputStream fos = new FileOutputStream(filename); fos.write(缓冲区); fos.close(); } catch (IOException io) { result.setText("nope"); }'
    • @BeardFace 你在哪里得到异常?
    • 我不完全确定我认为它与 FileOutputStream 有关系,因为当我评论它时我不再得到它@ALeaadam
    • @BeardFace 您应该能够写入 SD 卡。你用什么作为文件名?
    • @Aleadam 我把 fortkickass.mp3 放在我的原始文件夹中,我需要任何权限才能写入 sdcard 吗?
    【解决方案2】:

    您是否忘记在您的清单文件中设置写入权限?

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    

    【讨论】:

      猜你喜欢
      • 2012-07-06
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      相关资源
      最近更新 更多