Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 背景中的NFC_Android_Android Intent_Broadcastreceiver_Nfc_Intentfilter - Fatal编程技术网

Android 背景中的NFC

Android 背景中的NFC,android,android-intent,broadcastreceiver,nfc,intentfilter,Android,Android Intent,Broadcastreceiver,Nfc,Intentfilter,我的应用程序已经在后台处理WIFI/Bluetooth连接/断开连接,并根据这些事件执行后台任务。 现在我想对NFC做同样的事情,但是我找到的所有样本都是在发现NFC标签时开始活动的 我已经尝试注册NDEFèU发现的接收器,但它不起作用 <receiver android:name="com.mxp.time.receivers.NfcReceiver" > <intent-filter> <action android:n

我的应用程序已经在后台处理WIFI/Bluetooth连接/断开连接,并根据这些事件执行后台任务。 现在我想对NFC做同样的事情,但是我找到的所有样本都是在发现NFC标签时开始活动的

我已经尝试注册NDEFèU发现的接收器,但它不起作用

 <receiver android:name="com.mxp.time.receivers.NfcReceiver" >
        <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        </intent-filter>
    </receiver>

事实上,我已经读到,这是不可能的,因为android的后备策略。 到目前为止,我找到的唯一解决方案是定义一个没有UI的活动,并对连接的标记进行轮询。 我真的不喜欢这种技术,因为它需要保持这种活动的开放性,这将导致电池使用量增加

有人能帮我吗

干杯,
Stefan不,那是不可能的。Android上的NFC被设计成一种(有意的)用户交互形式(因此使用用户可见的活动)。毕竟,这就是NFC标签的用途

因此,
android.nfc.action..\u发现的
意图只发送给活动,不能通过广播接收器接收。因此,接收这些事件并使其看起来在后台发生的唯一可能性是使用一个没有UI的活动,然后将这些事件转发给您的后台任务


对于NDEF_发现的意图(以及相关数据),通常不需要保持活动处于打开状态以执行轮询。相反,您可以注册根据特定意图启动的活动。顺便说一句,当屏幕打开时,安卓正在以任何方式轮询标签,当一个活动注册接收NFC事件时,电池的使用应该没有太大区别。

问题是,我的应用程序是一个时间跟踪软件,一个用户请求他只想将设备放在他的NFC标签上开始跟踪。到目前为止我还没有发现问题,但他也希望在他从贴纸上取下设备时停止时间跟踪。。。唯一可行的解决方案是保持设备处于唤醒状态,并一直进行轮询,但这并不好:(因为Android(除非您对Android系统进行了一些黑客攻击)仅在设备处于唤醒状态时激活NFC读写器功能(并轮询标签),屏幕打开,设备解锁(有黑客可以避免对根设备的解锁限制,Android 5上也有例外)对此你几乎无能为力。