Я хочу установить мелодию звонка для конкретного контакта. Я знаю, как получить контакт и установить мелодию звонка для телефона, но как настроить индивидуальную мелодию звонка для определенного контакта?
Мой сценарий :
Я нажимаю кнопку и активен intent(RingtoneManager.ACTION_RINGTONE_PICKER)
, чтобы перейти к
активность выбора мелодии звонка
После выбора мелодии звонка я возвращаюсь к ContactDetailActivity
с
a path
- Конец, я использую
path
, чтобы установить собственную мелодию звонка для определенного контакта
Вот событие клика, чтобы изменить на рингтон :
ic_ringtone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Settings.System.canWrite(ContactDetailActivity.this)) {
Intent intent=new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, ringtone);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, ringtone);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI, ringtone);
startActivityForResult(intent , 24);
}else {
Toast.makeText(ContactDetailActivity.this, "Vui lòng cấp quyền để đặt nhạc chuông"
, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
}
});
, вот моя функция добавления рингтона
public void addRingtone(String path){
//Phone is phone number of contact that I got
final Uri lookupUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, phone);
final String []projection = new String[] {ContactsContract.Contacts._ID
, ContactsContract.Contacts.LOOKUP_KEY};
final Cursor data = getContentResolver().query(lookupUri, projection, null, null, null);
data.moveToFirst();
try {
// Get the contact lookup Uri
final long contactId = data.getLong(0);
final String lookupKey = data.getString(1);
final Uri contactUri = ContactsContract.Contacts.getLookupUri(contactId, lookupKey);
if (contactUri == null) {
// Invalid arguments
return;
}
// Apply the custom ringtone
final ContentValues values = new ContentValues(1);
values.put(ContactsContract.Contacts.CUSTOM_RINGTONE, path);
getContentResolver().update(contactUri, values, null, null);
} finally {
// Don't forget to close your Cursor
data.close();
}
}
А вот и onActivityResult :
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case 24:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Settings.System.canWrite(ContactDetailActivity.this)) {
ringtone = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
addRingtone(ringtone.getPath());
// Toast.makeText(ContactDetailActivity.this, ringtone.getPath() + " " + phone + " " + id, Toast.LENGTH_SHORT).show();
}else {
Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
break;
default:
break;
}
}
}
Извините за мой плохой английский.
Я трачу 3 дня на это, и я действительно хочу это исправить. Любая помощь или предложение приветствуется. Большое вам спасибо