Как установить собственную мелодию звонка для конкретного контакта? - PullRequest
1 голос
/ 15 июня 2019

Я хочу установить мелодию звонка для конкретного контакта. Я знаю, как получить контакт и установить мелодию звонка для телефона, но как настроить индивидуальную мелодию звонка для определенного контакта?

Мой сценарий :

  1. Я нажимаю кнопку и активен intent(RingtoneManager.ACTION_RINGTONE_PICKER), чтобы перейти к
    активность выбора мелодии звонка

  2. После выбора мелодии звонка я возвращаюсь к ContactDetailActivity с a path

  3. Конец, я использую 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 дня на это, и я действительно хочу это исправить. Любая помощь или предложение приветствуется. Большое вам спасибо

1 Ответ

0 голосов
/ 17 июня 2019

Да, наконец-то я это исправил. Проблема с входным параметром addRingtone(ringtone.getPath()); Измените его на addRingtone(ringtone.toString());, и он будет работать

...