Android How to set a sound as ringtone with long press on button

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;  
  }  

}


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]);
链接地址: http://www.djcxy.com/p/26218.html

上一篇: WebView不起作用

下一篇: Android如何通过长按按钮将铃声设置为铃声