tags:

views:

128

answers:

1

How do i set the sound as ringtone with long press on the button?

At the moment it only works on sound4 but not sound5

package com.test.soundboard;

import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream;import android.view.ContextMenu.ContextMenuInfo;
import android.widget.Button;
import android.widget.Toast; import android.app.Activity; import android.content.ContentValues; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.view.ContextMenu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener;

public class SoundBoardTest extends Activity implements OnClickListener{

private SoundManager mSoundManager;

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);

    mSoundManager = new SoundManager();
    mSoundManager.initSounds(getBaseContext());
    mSoundManager.addSound(1, R.raw.sound4);
    mSoundManager.addSound(2, R.raw.sound5);

//BUTTONS PLAY SOUND WHEN PRESSED

    View SoundButton4 = findViewById(R.id.SoundButton4);
    SoundButton4.setOnClickListener(this);

    View SoundButton5 = findViewById(R.id.SoundButton5);
    SoundButton5.setOnClickListener(this);

}

        public void onClick(View v) {
            switch (v.getId()) {

            case R.id.SoundButton4:
    mSoundManager.playSound(1);
            break;

        case R.id.SoundButton5:
mSoundManager.playSound(2);
            break;
}

//WHEN LONG PRESSED BUTTONS BRING UP CONTEXT MENU FOR SAVE AS RINGTONE OR NOTIFICATION

    Button SoundButton4 = (Button) findViewById(R.id.SoundButton4);  
    registerForContextMenu(SoundButton4);  

    Button SoundButton5 = (Button) findViewById(R.id.SoundButton5);  
    registerForContextMenu(SoundButton5);  
}  

//CONTEXT MENU FOR BUTTON 1 @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.sound4)){  
        // 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 (savering(R.raw.sound4)){  
        // 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();
        }       


}

public boolean savering(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/ringtones/";  
   String filename="soundtest4"+".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, "HahaSound");  
   values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/ogg");  
   values.put(MediaStore.Audio.Media.ARTIST, "cssounds ");  
   values.put(MediaStore.Audio.Media.IS_RINGTONE, true);  
   values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);  
   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;  
  }  

}

A: 

This is because your saving to file is setup statically to save R.raw.sound4 each time (you have written savering(R.raw.sound4) ). You need use the variable you have passed to it (ressound) and use it to decide which file to save.

The best way to do this is probably to create an array of sounds (or references to them) like so (This goes at start of your java file with rest of variable decelerations):

  int[] soundArray = {R.raw.sound1,R.raw.sound2,R.raw.sound3}; // etc...

Which you'd add to the soundManager like so (This goes where you were adding the sounds manually)

  for (int i=0; i<soundArray.length; i++){   // Loops over the sound array
  mSoundManager.addSound(i, soundArray[i]);  // Adds sounds to sound manager
  }

Then your savering function would use the passed argument to know which file to save. (This goes where you previously called the function)

  savering(soundArray[ressound]);
stealthcopter
I really dont get where i should add the code you mention, please could you reply again with what the SoundBoardTest.java code and SoundManager.java code should actually be, (with 10 sounds, sound1, sound2 etcc..)Many Thankyou's
lucy
I am not going to write your program for you, I have added some explanation of where each item should be.
stealthcopter