Код Android Java Soundboard только установка первой кнопки в качестве мелодии звонка и т. Д. - PullRequest
1 голос
/ 06 февраля 2011

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

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

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

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

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

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 Ответ

1 голос
/ 12 апреля 2011

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

savering(R.raw.sound1)

и

savenot(R.raw.sound1)

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

...