API层入口为setNdefPushMessage,位于NfcAdapter类
public void setNdefPushMessage(NdefMessage message, Activity activity,
Activity ... activities) {
if (activity == null) {
throw new NullPointerException("activity cannot be null");
}
mNfcActivityManager.setNdefPushMessage(activity, message);
for (Activity a : activities) {
if (a == null) {
throw new NullPointerException("activities cannot contain null");
}
mNfcActivityManager.setNdefPushMessage(a, message);
}
}
NfcAdapter类中有个成员变量NfcActivityManager,该类内部使用一个WeakHashmap存放所有需要进行NFC P2P推送的Activity。Key为Activity本身,Value为NfcActivityState。NfcActivityState保存和NFC P2P相关的一些对象及Activity的状态。
由于NFC P2P推送只有在Activity为前景Activity的状态下会执行,所以NfcActivityState中会保存Activity的状态,另外还保存着待推送的NdefMessage、和NFC P2P推送相关的回调接口对象。
/**
* NFC state associated with an {@link Activity}
*/
class NfcActivityState {
boolean resumed = false; // is the activity resumed
NdefMessage ndefMessage;
NfcAdapter.CreateNdefMessageCallback ndefMessageCallback;
NfcAdapter.OnNdefPushCompleteCallback onNdefPushCompleteCallback;
@Override