通过 activity 快捷方式启动时,如何在字段中设置数据库中的特定数据?

How to set specific data from database in fields when launch through activity shortcut?

我正在开发一个基于 android 的笔记应用程序,categories.I 应该在主屏幕上创建笔记快捷方式。当用户点击快捷方式时,相关的 activity 应该打开,具体数据应该在 Edit-texts 中设置,即它的标题和 description.I 无法理解这样做的逻辑。

我尝试了我想到的所有可能的解决方案。我在快捷方式意图中传递了 Id of note,但是当它从快捷方式启动时,字段仍然是空的。 这是我创建快捷方式的代码片段:

创建快捷方式的函数:

 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" />

同时添加 Intent 过滤器并在非启动时导出 属性 activity:

<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>

当打开另一个 activity 的笔记时,activity 从 Intent 接收数据:

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); 

我也试过在函数的快捷意图中使用这个id,但结果没有变化。

shortcutIntent.putExtra("key_primary",Id);

我想在打开时保留数据,使用 shortcut.For 示例为不同的笔记快捷方式,应该在字段中设置预期的数据,就像在 whatsapp 中一样,可以创建不同联系人的聊天快捷方式。但不幸的是,我无法理解应该怎么做,因为每次我使用快捷方式打开时,它的字段都会变空。从快捷方式启动时我应该在哪里传递id以及如何设置数据。

如果您使用 shortcutIntent.putExtra("key_primary",Id);,那么您需要使用

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

也就是第一个参数(key_primary)是key,用来标识具体的Intent Extra。因此,键值必须与为要检索的值(默认值除外)放置 Intent Extra 时使用的键值相匹配。

这样编码 Id=newInt.getIntExtra("Id",0); 而不使用 matching/paired shortcutIntent.putExtra("Id",Id); 将始终导致 0,因为 Intent Extra 不存在,因此返回默认值。