Как установить конкретные данные из базы данных в полях при запуске через ярлык активности? - PullRequest
1 голос
/ 27 мая 2019

Я разрабатываю приложение для заметок на основе Android с категориями. Я должен создавать ярлыки заметок на главном экране. Когда пользователь нажимает на ярлык, соответствующая операция должна быть открыта, и конкретные данные должны быть установлены в Edit-текстах, т.е. его название и описание. Я не могу понять логику, чтобы сделать это.

Я перепробовал все возможные решения, которые приходят мне в голову. Я передал идентификатор заметки в ярлыке, но при запуске из ярлыка поля все еще пусты. Это мой фрагмент кода для создания ярлыка:

Функция создания ярлыка:

 private void createShortcutOfActivity() {

        Intent shortcutIntent = new Intent(getApplicationContext(),
                TextNotes.class);
        shortcutIntent.setAction(Intent.ACTION_MAIN);

        Intent addIntent = new Intent();
        addIntent
                .putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, editTitle.getText().toString());
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
                Intent.ShortcutIconResource.fromContext(getApplicationContext(),
                        R.mipmap.ic_launcher));
        addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
        addIntent.putExtra("duplicate", false);  //may it's already there so   don't duplicate
        getApplicationContext().sendBroadcast(addIntent);
    }

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

В Menifest разрешение на использование:

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />

Также добавьте фильтр намерений и экспортируемое свойство в незапускаемую активность:

<activity
            android:name=".TextNotes"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.CREATE_SHORTCUT"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

Действие получает данные из намерения при открытии заметки из другого действия:

Intent newInt=getIntent();
        isDoubleClicked=newInt.getBooleanExtra("Chk",false);
        Cat=newInt.getStringExtra("Category");
        Id=newInt.getIntExtra("Id",0);

        String title=newInt.getStringExtra("Message");
        String description=newInt.getStringExtra("Message2");
        check=newInt.getStringExtra("Check");

        editTitle.setText(title);
        editText.setText(description); 

Я также пытался использовать этот идентификатор в контекстном назначении функции, но без изменений в результате.

shortcutIntent.putExtra("key_primary",Id);

Я хочу сохранить данные при открытии с помощью ярлыка. Например, для другого ярлыка примечания предполагаемые данные должны быть установлены в полях, как в WhatsApp, могут создаваться ярлыки чата для разных контактов. Но, к сожалению, я не могу понять, как это сделать, потому что каждый раз, когда я открываю с помощью ярлыка, его поля становятся пустыми. Где я должен передать идентификатор и как установить данные при запуске из ярлыка.

1 Ответ

1 голос
/ 27 мая 2019

Если вы используете shortcutIntent.putExtra("key_primary",Id);, вам нужно получить его, используя

Id=newInt.getIntExtra("key_primary",0);

То есть первый параметр (key_primary) - это ключ, который используется для идентификации конкретного Intent Extra. Таким образом, значение ключа должно соответствовать значению ключа, используемому при добавлении Intent Extra, для получения значения (отличного от значения по умолчанию).

Как таковое кодирование Id=newInt.getIntExtra("Id",0); без использования соответствующего / парного shortcutIntent.putExtra("Id",Id); всегда будет приводить к 0, поскольку Intent Extra не существует, поэтому возвращается значение по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...