2011-02-06 1 views
1

Я играл вокруг с этим кодом, и я, очевидно, пытаюсь сделать деку, что позволит сэкономить на мелодию longclicks и т.д.Android Java кода Дека только установки первой кнопки в качестве мелодии звонка/и т.д.

Хотя, это является основным кодом для одной кнопки. Я дублировал один и тот же код поверх друг друга, пытаясь сделать массивы, просто все. Я не могу заставить этот код работать так, как я этого хочу.

Если у вас несколько кнопок и больше кодов.

Я могу получить звуки для всех игр для кнопок. Я могу открыть меню для каждой кнопки. Тхо, первая кнопка всегда та, которая сохраняется, а остальные просто падают с карты.

Я предполагаю, что мой поток данных по следующему коду не обрезается и подбирается другими звуковыми кнопками. В любом случае, это не сработает. Пожалуйста, помогите мне.

public class Soundboard extends Activity { 
    private SoundManager mSoundManager; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mSoundManager = new SoundManager(); 
     mSoundManager.initSounds(getBaseContext()); 
     mSoundManager.addSound(1, R.raw.sound1); 

     Button SB = (Button)findViewById(R.id.sound1); 

     SB.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       mSoundManager.playSound(1);      
      } 
     }); 

     Button btn = (Button) findViewById(R.id.sound1); 
     registerForContextMenu(btn); 
    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) { 
     super.onCreateContextMenu(menu, v, menuInfo); 
     menu.setHeaderTitle("Save as..."); 
     menu.add(0, v.getId(), 0, "Ringtone"); 
     menu.add(0, v.getId(), 0, "Notification"); 
    } 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 
     if(item.getTitle()=="Ringtone"){function1(item.getItemId());} 
     else if(item.getTitle()=="Notification"){function2(item.getItemId());} 
     else {return false;} 
     return true; 
    } 

    public void function1(int id){ 
     if (savering(R.raw.sound1)) { 
      // Code if successful 
      Toast.makeText(this, "Saved as Ringtone", Toast.LENGTH_SHORT).show(); 
     }   
     else   
     { 
      // Code if unsuccessful 
      Toast.makeText(this, "Failed - Check your SDCard", Toast.LENGTH_SHORT).show(); 
     } 

    } 
    public void function2(int id){ 
     if (savenot(R.raw.sound1)) { 
      // Code if successful 
      Toast.makeText(this, "Saved as Notification", Toast.LENGTH_SHORT).show(); 
     }   
     else   
     { 
      // Code if unsuccessful 
      Toast.makeText(this, "Failed - Check your SDCard", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    //Save into Ring tone Folder 
    public boolean savering(int ressound){ 
     byte[] buffer=null; 
     InputStream fIn = getBaseContext().getResources().openRawResource(ressound); 
     int size=50; 

     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="/sdcard/media/audio/ringtones/"; 

     String filename="ohhh"+".ogg"; 

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

     FileOutputStream save; 
     try { 
      save = new FileOutputStream(path+filename); 
      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, "Ohhh Ringtone"); 
     values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg"); 
     values.put(MediaStore.Audio.Media.ARTIST, "weee"); 
     values.put(MediaStore.Audio.Media.IS_RINGTONE, true); 
     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; 
    } 

    //Save in Notification Folder 
    public boolean savenot(int ressound){ 
     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="/sdcard/media/audio/notifications/"; 

     String filename="ohhh"+".ogg"; 

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

     FileOutputStream save; 
     try { 
      save = new FileOutputStream(path+filename); 
      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, "Ohhh Notification"); 
     values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg"); 
     values.put(MediaStore.Audio.Media.ARTIST, "weee"); 
     values.put(MediaStore.Audio.Media.IS_RINGTONE, true); 
     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; 
    } 
} 

ответ

1

Я только учусь Android программирования сам, но, похоже, именно поэтому вы всегда сохраняя первый звук:

savering(R.raw.sound1) 

и

savenot(R.raw.sound1) 

Оба эти явно сохраняют первый звук. Если вы не написали отдельную функцию1 и функцию2 для каждой кнопки. Но есть лучший способ справиться с экономией, чем это.

+0

Просто для наблюдения - я смог использовать ваш код почти линейно для линии - я изменил значение R.raw.soundX как ресурс конкретного звука, а не R.raw.sound1. Я почти уверен, что это была твоя проблема. – johnbr

Смежные вопросы