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