Note that there are some explanatory texts on larger screens.

plurals
  1. POStuck on how to make activity stop playing ringtone after close
    text
    copied!<p>I'm a noob and i'm having trouble stopping the music in my app, it keeps playing long after i close the app. heres some code i hope someone can help! Here's the part i need help with, the rest of the code works. </p> <pre><code>import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import android.app.Activity; import android.content.ContentValues; import android.content.Intent; import android.content.res.AssetFileDescriptor; import android.content.res.Resources; import android.graphics.Typeface; import android.media.MediaPlayer; import android.media.RingtoneManager; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.view.ContextMenu; import android.view.MenuItem; import android.view.View; import android.view.ContextMenu.ContextMenuInfo; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class Tones extends Activity { int selectedSoundId; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tones); final MediaPlayer player = new MediaPlayer(); final Resources res = getResources(); // Keep them in the same order final int[] buttonIds = { R.id.s1, R.id.s2, R.id.s3, R.id.s4, R.id.s5, R.id.s6, R.id.s7, R.id.s8, R.id.s9, R.id.s10, R.id.s11, R.id.s12, R.id.s13, R.id.14, R.id.s15 }; final int[] soundIds = { R.raw.s1, R.raw.s2, R.raw.s3, R.raw.s4, R.raw.s5, R.raw.s6, R.raw.s7, R.raw.s8, R.raw.s9, R.raw.s10, R.raw.s11, R.raw.s12, R.raw.s13, R.raw.s14, R.raw.s15, }; View.OnClickListener listener = new View.OnClickListener() { public void onClick(View v) { // find the index that matches the button's ID, and then reset // the MediaPlayer instance, set the data source to the // corresponding // sound effect, prepare it, and start it playing. for (int i = 0; i &lt; buttonIds.length; i++) { if (v.getId() == buttonIds[i]) { selectedSoundId = soundIds[i]; AssetFileDescriptor afd = res .openRawResourceFd(soundIds[i]); player.reset(); try { player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { player.prepare(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } player.start(); } else if (v.getId() == buttonIds[i]) { selectedSoundId = soundIds[i]; player.pause(); finish(); } } } }; // set the same listener for every button ID, no need // to keep a reference to every button for (int i = 0; i &lt; buttonIds.length; i++) { Button soundButton = (Button) findViewById(buttonIds[i]); registerForContextMenu(soundButton); soundButton.setOnClickListener(listener); } } @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(selectedSoundId)) { // 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(selectedSoundId)) { // 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); try { buffer = new byte[fIn.available()]; fIn.read(); fIn.close(); } catch (IOException e) { // TODO Auto-generated catch block return false; } String path = Environment.getExternalStorageDirectory().getPath() + "/media/ringtone/"; String filename = "sounds1" + selectedSoundId + ".mp3"; 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, selectedSoundId); values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); values.put(MediaStore.Audio.Media.ARTIST, "sounds"); 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); Uri uri = MediaStore.Audio.Media.getContentUriForPath(k .getAbsolutePath()); getContentResolver().delete( uri, MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath() + "\"", null); Uri newUri = getContentResolver().insert(uri, values); RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_RINGTONE, newUri); 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 = Environment.getExternalStorageDirectory().getPath() + "/media/notification/"; String filename = "sounds" + selectedSoundId + ".mp3"; 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, selectedSoundId); values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); values.put(MediaStore.Audio.Media.ARTIST, "sounds"); 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); Uri uri = MediaStore.Audio.Media.getContentUriForPath(k .getAbsolutePath()); getContentResolver().delete( uri, MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath() + "\"", null); Uri newUri = getContentResolver().insert(uri, values); RingtoneManager.setActualDefaultRingtoneUri(this, RingtoneManager.TYPE_NOTIFICATION, newUri); return true; </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload