2

私のアプリでは、タスクを編集し、着信音を選択してデータベースに保存するためのレイアウトがあります。タスクを更新すると、着信音名も更新されます。そのために着信音ピッカーを使用し、新しいインテントを開始して、選択された着信音 URI を onActivityResult() メソッド内で取得します。

問題は、クリックして新しい RingTone を選択するたびに、ページがリロードされ、フォーミュラーに入力されたデータベースから取得したすべてのデータが失われることです。

どうすればこの問題を解決できますか。着信音を選択した後、完全なアクティビティをリロードせずに着信音ピッカーを開く方法はありますか?

ピッカーを開く方法は次のとおりです。

    protected void openRingtoneDialog() {

    final Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALL);
    intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, getString(R.string.ringtone_choose));

    if (mAlarmTonUri != null) {
        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, mAlarmTonUri);
    } 
    else {
        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, (Uri) null);
    }
    startActivityForResult(intent, RINGTONE_RESULT);
}

ここでは、選択した着信音を取得する方法を説明します。

    @Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {

    String ringTonTitle = "";

    // Get the result from RingtoneActivity
    if (resultCode == RESULT_OK && requestCode == RINGTONE_RESULT) {
        mAlarmTonUri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);          
        if (mAlarmTonUri != null) {
            mAlarmTonValue = mAlarmTonUri.toString();
            ringTonTitle = RingtoneManager.getRingtone(this, mAlarmTonUri).getTitle(this);              
        }
        else {
            ringTonTitle = "unknow";
        }

        mAlarmTonTextView.setText(ringTonTitle);
    }

ご協力ありがとうございました!

4

1 に答える 1