¿Tono de llamada personalizado para un grupo de contactos de Android?

Quiero configurar un tono de llamada personalizado para un grupo de contactos. Puedo configurar un tono de llamada personalizado para un contacto específico, pero no sé cómo configurar uno para un grupo de contactos.

Aquí está mi código para configurar el tono de llamada personalizado a un contacto específico:

public class RingtoneActivity extends Activity { Context ctx; TextView songescape; static final int PICK_CONTACT = 1, PICK_CONTACTGROUP = 1; Cursor cursor; String SDCardRoot; protected static final int CONTEXTMENU_OPTION1 = 1; protected static final int CONTEXTMENU_OPTION2 = 2; protected static final int CONTEXTMENU_OPTION3 = 3; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_ringtone); ctx = this; songescape = (TextView) findViewById(R.id.ringtonetext); registerForContextMenu(songescape); } public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); // Set title for the context menu menu.setHeaderTitle("Set as"); // Add all the menu options menu.add(1, 1, CONTEXTMENU_OPTION1, "Default Ringtone"); menu.add(1, 2, CONTEXTMENU_OPTION2, "Ringtone to specific Contact"); menu.add(1, 3, CONTEXTMENU_OPTION3, "Ringtone to Contact Group"); } public boolean onContextItemSelected(MenuItem item) { // Get extra info about list item that was long-pressed AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item .getMenuInfo(); // Perform action according to selected item from context menu switch (item.getItemId()) { case CONTEXTMENU_OPTION1: // set as default ringtone setRingTone(); break; case CONTEXTMENU_OPTION2: // set ringtone to specific contact Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent, PICK_CONTACT); /* * cursor = getContentResolver().query( * ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, * null, null); */ break; case CONTEXTMENU_OPTION3: // set ringtone to contacts group break; } return true; } public void setRingTone() { try { String SDCardRoot = (Environment.getExternalStorageDirectory() + "/cocktail.mp3"); ContentValues values = new ContentValues(); values.put(MediaStore.MediaColumns.DATA, SDCardRoot); values.put(MediaStore.MediaColumns.TITLE, "COCKTAIL RINGTONE"); values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*"); values.put(MediaStore.MediaColumns.SIZE, 2030); values.put(MediaStore.Audio.Media.ARTIST, ""); 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); Uri uri = MediaStore.Audio.Media.getContentUriForPath(SDCardRoot); getContentResolver().delete(uri, MediaStore.MediaColumns.DATA + "=\"" + SDCardRoot + "\"", null); Uri newUri = getContentResolver().insert(uri, values); RingtoneManager.setActualDefaultRingtoneUri(ctx, RingtoneManager.TYPE_RINGTONE, newUri); Toast.makeText(getApplicationContext(), "Song is set as Ringtone!", 1000).show(); } catch (Throwable t) { Toast.makeText(getApplicationContext(), "Exception!", 1000).show(); Log.d("Exception", "catch exception" + t); } } @Override public void onActivityResult(int reqCode, int resultCode, Intent data) { super.onActivityResult(reqCode, resultCode, data); switch (reqCode) { case (PICK_CONTACT): if (resultCode == Activity.RESULT_OK) { Uri contactData = data.getData(); Cursor c = managedQuery(contactData, null, null, null, null); if (c.moveToFirst()) { String id = c.getString( c.getColumnIndexOrThrow( ContactsContract.Contacts._ID)); // set custom ringtone to this id Uri localUri = Uri.withAppendedPath( ContactsContract.Contacts.CONTENT_URI, id); ContentValues localContentValues = new ContentValues(); String hasPhone = c.getString( c.getColumnIndex( ContactsContract.Contacts.HAS_PHONE_NUMBER)); if (hasPhone.equalsIgnoreCase("1")) { Cursor phones = getContentResolver() .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + id, null, null); phones.moveToFirst(); String cNumber = phones.getString(phones .getColumnIndex("data1")); System.out.println("number is:" + cNumber); } String name = c.getString( c.getColumnIndex( ContactsContract.Contacts.DISPLAY_NAME)); String SDCardRoot1 = (Environment .getExternalStorageDirectory() + "/cocktail.mp3"); // from here localContentValues.put(MediaStore.MediaColumns.DATA, SDCardRoot); localContentValues.put(MediaStore.MediaColumns.TITLE, "COCKTAIL RINGTONE"); localContentValues.put(MediaStore.MediaColumns.MIME_TYPE, "audio/*"); localContentValues.put(MediaStore.MediaColumns.SIZE, 2030); localContentValues.put(MediaStore.Audio.Media.ARTIST, ""); localContentValues.put(MediaStore.Audio.Media.IS_RINGTONE, true); // localContentValues.put(MediaStore.Audio.Media.IS_NOTIFICATION, // true); // localContentValues.put(MediaStore.Audio.Media.IS_ALARM, // true); localContentValues.put(MediaStore.Audio.Media.IS_MUSIC, false); // to here localContentValues.put( ContactsContract.Data.RAW_CONTACT_ID, id); localContentValues.put( ContactsContract.Data.CUSTOM_RINGTONE, SDCardRoot1); getContentResolver().update(localUri, localContentValues, null, null); Toast.makeText(this, "Ringtone assigned to: " + name, 0) .show(); } } break; } } } 

menú contextual 3 es el código para establecer el tono de llamada al grupo.

  • Java.lang.IllegalStateException: intenta volver a abrir un objeto ya cerrado: android.database.sqlite.SQLiteQuery
  • Modificación de la información de contacto
  • Android vcard cadena para contactar
  • El proveedor de contactos de Android sólo obtiene contactos telefónicos con todos los correos electrónicos
  • Aplicación de copia de seguridad y sincronización de contactos
  • ¿Cómo encontrar el tamaño de imagen máximo admitido para las imágenes de contactos?
  • Recibir cambios de contacto (agregados, eliminados y cambiados)
  • Android: Cómo rellenar un ListView con el indexador de alfabeto y fastscroll como en la aplicación de contactos.
  • Sqlite android extraer contactos con número de teléfono
  • Logcat dice "datos de columna no válidos1"
  • Obtenga información de contacto específica de la URI devuelta por Intent.ACTION_PICK
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.