我有一个EditTextPreference允许用户输入一些结构化文本的子类,并在关闭对话框之前对其进行验证。我想让用户在首选项对话框打开时通过扫描 NFC 标签来输入此文本。扫描标签将填充EditText接收到的文本。在首选项的对话框未打开时扫描标签不会产生任何效果(即它会让任何其他注册的应用程序处理ACTION_NDEF_DISCOVERED Intent)。
我已经在相关领域有非常相似的工作Activity,所以我不需要 NFC 部分本身的任何帮助。问题是通过PreferenceNFC API 以下列Activity方式将所有内容连接到主机时:-
enableForegroundDispatch()接受一个Activity论点- 结果通过
Activity.onNewIntent()
我对如何进行有两个想法,但有不同的缺点:-
- 要求
Activity包含 myPreference为我完成所有设置。它需要在首次创建时告诉Preference'Activity的身份,以允许稍后Preference在正确的时间调用。它还需要将呼叫转发到. 这似乎很脆弱——尤其是考虑到通常会在 a 内,并且不需要知道任何关于个人偏好的信息——但如果能够找出托管它的内容会更合理。enableForegroundDispatchdisableForegroundDispatchonNewIntent()PreferencePreferencePreferenceFragmentActivityPreferenceActivity - 停止成为一个
DialogPreference并用私人Activity主题(如对话)替换对话。创建布局没有问题,这会将所有与 NFC 相关的代码保留在特殊的Activity. 但接下来的问题是如何startActivityForResult从Preference.Intent在中设置 anPreference是不够的,因为它使用startActivity并且没有机制来获取结果。即使我设法做到了startActivityForResult,我也遇到了与上面相同的问题,那就是它会被传递到Activity主机上Preference,这使得机制再次变得脆弱。如果我可以使用其他渠道从 中获取文本,则Activity此选项会更合适。
你能帮助克服这些问题吗?获得任一替代工作就足够了,但我更喜欢选项 2,因为它可以帮助我解决另一个类似的问题。