在这里的很多帮助下,我几乎成功地启动并运行了我的应用程序,但我遇到了一个问题。我基本上是Java的初学者,所以这对我来说有点深入,但我仍然希望得到一些帮助。基本上,该应用程序会显示一个音调列表,并允许您播放它们,如果您按住它,它会弹出一个上下文菜单,并提供将所选音调复制到SD卡的选项。我知道的问题出现在倒数第四行:
boolean saved=saveas(sound.getSoundResourceId(),"filename"),因为未使用保存的变量
。我不太确定如何解决这个问题,也不知道我应该用什么来代替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); } }}
如果不打算使用saved
,请从该语句中删除boolean saved =
,只使用saveas(sound.getSoundResourceId(),"filename");
。