我有一个带有大量 NFC 和 GPS 功能的 Android 应用程序。我需要使用 GPS 或 NFC 标签扫描来验证用户的位置。
我创建了一个处理 NFC 的用例,但我想不参考我在本课程中的活动。对我来说问题是我需要活动
用例应该有一个start()函数来启动NFC前台调度。它应该在扫描后自动停止前台调度(这需要活动)
我考虑了我的活动和保存该活动的 NFC 用例之间的一个类。我称之为 InBetweenClass。
class InBetweenClass(val activity: AppCompatActivity) {
private var nfcAdapter: NfcAdapter = NfcAdapter.getDefaultAdapter(activity)
fun startNfc() {
val intent = Intent(activity, activity.javaClass)
intent.flags = Intent.FLAG_ACTIVITY_SINGLE_TOP
val pendingIntent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
PendingIntent.getActivity(activity, 0, intent, PendingIntent.FLAG_MUTABLE)
} else {
PendingIntent.getActivity(activity, 0, intent, 0)
}
nfcAdapter.enableForegroundDispatch(activity, pendingIntent, null, null)
}
fun stopNfc() {
try {
nfcAdapter.disableForegroundDispatch(activity)
} catch (ex: Exception) {
// tbd
}
}
}
问题: 我现在可以将 InBetweenClass 的引用移交给我的 NFC 用例。但这真的比在我的用例中进行活动更好吗?当我持有对 InBetweenClass 的引用并且此类持有活动时,在我看来,它或多或少与在我的 NFC 用例中拥有该活动相同。
什么模式最能将我的用例与我的活动分离? 我的应用程序是一个单一活动应用程序。
也许将签名更改为:
class InBetweenClass(val activity: AppCompatActivity)
至:
abstract class BaseNfcActivity : AppCompatActivity(), NfcAdapter.ReaderCallback