2013-08-29 51 views
2

有很多幫助(在這裏)我設法幾乎讓我的應用程序運行起來,但我有一個問題。我基本上是Java的初學者,所以這對我來說有點深刻,但我仍然想要一些幫助。基本上,應用程序會顯示一個音調列表,並讓您播放它們,如果您觸摸並按住它,則會彈出一個上下文菜單,並具有將所選音調複製到SD卡的選項。 我知道的問題在於倒數第四行:複製到SD的布爾問題,需要一些幫助來糾正

boolean saved = saveas(sound.getSoundResourceId(),"filename");
,因爲未使用變量
saved
。 我不太清楚如何解決這個問題,或者我應該用什麼來代替 saved,只是想知道這裏的任何人是否有線索? 下面是完整的代碼:

public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
registerForContextMenu(getListView()); 
this.getListView().setSelector(R.drawable.selector); 
//create a simple list 
mSounds = new ArrayList<Sound>(); 
Sound s = new Sound(); 
s.setDescription("Affirmative"); 
s.setSoundResourceId(R.raw.affirmative); 
mSounds.add(s); 
s = new Sound(); 
s.setDescription("Anjels"); 
s.setSoundResourceId(R.raw.anjels); 
mSounds.add(s); 
s = new Sound(); 
s.setDescription("Aggro"); 
s.setSoundResourceId(R.raw.aggro); 
mSounds.add(s); 
mSounds.add(s); 
mAdapter = new SoundAdapter(this, R.layout.list_row, mSounds); 
setListAdapter(mAdapter); 
} 
@Override 
public void onListItemClick(ListView parent, View v, int position, long id){ 
Sound s = (Sound) mSounds.get(position); 
MediaPlayer mp = MediaPlayer.create(this, s.getSoundResourceId()); 
mp.start(); 

}@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.context_menu, menu); 
    } 

public boolean saveas(int ressound, String fName){ 
    byte[] buffer=null; 
    InputStream fIn = getBaseContext().getResources().openRawResource(ressound); 
    int size=0; 

    try { 
    size = fIn.available(); 
    buffer = new byte[size]; 
    fIn.read(buffer); 
    fIn.close(); 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    return false; 
    } 

    String path="notifications/halon/"; 
    String filename=fName+".ogg"; 
    String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath(); 
    String completePath = baseDir + File.separator + "music" + File.separator + "halon" + File.separator + filename; 


    boolean exists = (new File(completePath)).exists(); 
    if (!exists){new File(completePath).mkdirs();} 

    FileOutputStream save; 
    try { 
    save = new FileOutputStream(completePath); 
    save.write(buffer); 
    save.flush(); 
    save.close(); 
    } catch (FileNotFoundException e) { 
    // TODO Auto-generated catch block 
    return false; 
    } catch (IOException e) { 
    // TODO Auto-generated catch block 
    return false; 
    }  

    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+path+filename))); 

    File k = new File(path, filename); 

    ContentValues values = new ContentValues(); 
    values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath()); 
    values.put(MediaStore.MediaColumns.TITLE, "exampletitle"); 
    values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg"); 
    values.put(MediaStore.Audio.Media.ARTIST, "cssounds "); 
    values.put(MediaStore.Audio.Media.IS_RINGTONE, false); 
    values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true); 
    values.put(MediaStore.Audio.Media.IS_ALARM, true); 
    values.put(MediaStore.Audio.Media.IS_MUSIC, false); 

    //Insert it into the database 
    this.getContentResolver().insert(MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()), values); 

    return true; 
    } 
@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    Sound sound = (Sound) getListAdapter().getItem(info.position); 
    int length = mSounds.size(); // get the length of mSounds object 
    String[] names = new String[length]; // creates a fixed array with strings 
    for(int i = 0; i < length; i++) { 
     // add sound name to string array 
     names[i] = mSounds.get(i).getDescription(); // returns the string name 
    } 
    switch(item.getItemId()) { 
    case R.id.copytosd: 
      Toast.makeText(this, "Applying " + getResources().getString(R.string.copy) + 
         " for " + names[(int)info.id], 
         Toast.LENGTH_SHORT).show(); 
      boolean saved = saveas(sound.getSoundResourceId(),"filename"); 
      return true; 
    default: 
      return super.onContextItemSelected(item); 
    } 
}} 
+0

目前還不清楚你有什麼樣的問題 – Blackbelt

回答

0

如果你不打算使用saved,刪除其中的語句boolean saved =,只是有saveas(sound.getSoundResourceId(),"filename");

+0

謝謝!這擺脫了錯誤,但仍然沒有複製到SD卡。只是想知道我是否已經有了我的路徑,因爲我知道在源代碼中硬編碼路徑並不好。你能看到其他問題或者我可能錯過的任何東西嗎? –

+0

@SeanBurrage:那麼,你的'ACTION_MEDIA_SCANNER_SCAN_FILE'似乎是錯誤的。按住'new File(completePath)'(而不是多次創建它),然後使用'Uri.fromFile(completePath)'作爲你的'Intent'。 – CommonsWare

+0

是否有機會發布代碼的內聯編輯?你似乎是唯一能幫助你的人。 –