Как установить вызывной тональный сигнал в Android от моего действия?

В вашем коде this относится к окну или к чему-то, кроме вашего vue-component. Затем вам нужно создать еще одну переменную, чтобы получить ссылку vue-component.

let that = this
window.addEventListener("beforeunload", function(event) {
    event.preventDefault();
    // problem line 
    that.$store.dispatch('CURR_TERMINAL_ACTION', that.id)
})
41
задан eebbesen 12 February 2015 в 05:09
поделиться

5 ответов

Наконец, мне удалось установить в качестве мелодии звонка по умолчанию тот, который я скачал. Код загрузки не включен ниже, только то, что было необходимо для установки его в качестве мелодии звонка по умолчанию.

File k = new File(path, "mysong.mp3"); // path is a file to /sdcard/media/ringtone

ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
values.put(MediaStore.MediaColumns.TITLE, "My Song title");
values.put(MediaStore.MediaColumns.SIZE, 215454);
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
values.put(MediaStore.Audio.Media.ARTIST, "Madonna");
values.put(MediaStore.Audio.Media.DURATION, 230);
values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
values.put(MediaStore.Audio.Media.IS_ALARM, false);
values.put(MediaStore.Audio.Media.IS_MUSIC, false);

//Insert it into the database
Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath());
Uri newUri = this.getContentResolver().insert(uri, values);

RingtoneManager.setActualDefaultRingtoneUri(
  myActivity,
  RingtoneManager.TYPE_RINGTONE,
  newUri
);  

В любом случае, я не совсем понимаю, что делает этот код.

Диспетчеру мелодий звонка нужен uri для файла, который должен быть установить как новый рингтон. Но этот uri не может быть напрямую связан с sdcard, например "/sdcard/media/ringtones/mysong.mp3". Это не работает!

Вам нужен внешний URI файла, который может быть чем-то вроде "/ external / audio / media / 46"

46 - это идентификатор столбца в базе данных MediaStore, поэтому вам нужно сначала добавить файл sdcard в базу данных.

В любом случае, как mediastore поддерживает его идентификаторы? Это число может стать очень большим, если вы проделаете эту операцию много раз.

Мне нужно удалить эту строку самостоятельно? Проблема в том, что иногда я даже не контролирую удаление файла, так как его можно удалить прямо с SD-карты с помощью файлового браузера.

69
ответ дан 27 November 2019 в 00:37
поделиться

Вы можете использовать встроенный класс RingtonePreference . У AndroidGuys есть хорошее руководство по этому здесь .

3
ответ дан russoue 27 November 2019 в 00:37
поделиться

Answer By Vidar слишком длинный и добавляет дубликаты каждый раз, когда вы хотите установить песню в качестве мелодии звонка. Вместо этого вы должны попробовать это

Uri newUri=Uri.parse("content://media/external/audio/media/"+ID);  
try {
      RingtoneManager.setActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE, newUri);
    }
catch (Throwable t) {


                  }
2
ответ дан Kishan Kumar 27 November 2019 в 00:37
поделиться

Я нашел этот код в приложении Media из Android.

Settings.System.putString(resolver, 
Settings.System.RINGTONE, ringUri.toString());

это работает от моего.

0
ответ дан Brais Gabin 27 November 2019 в 00:37
поделиться

предоставить намерение для выбора мелодии звонка.

final Uri currentTone= RingtoneManager.getActualDefaultRingtoneUri(MainActivity.this, RingtoneManager.TYPE_ALARM);
                Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE);
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select Tone");
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, currentTone);
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
                intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
                startActivityForResult(intent, 999);

затем поймать результат выбора в onActivityResult.

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == 999 && resultCode == RESULT_OK){
            Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
            txtView.setText("From :" + uri.getPath());
            //Set selected ringtone here.
            RingtoneManager.setActualDefaultRingtoneUri(
                    this,
                    RingtoneManager.TYPE_RINGTONE,
                    uri
            );
        }
    }
0
ответ дан Tatson Baptista 27 November 2019 в 00:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: