Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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应用程序不推送Ndef消息_Android_Nfc_Intentfilter_Ndef - Fatal编程技术网

Android NFC应用程序不推送Ndef消息

Android NFC应用程序不推送Ndef消息,android,nfc,intentfilter,ndef,Android,Nfc,Intentfilter,Ndef,我正在创建一个Android应用程序,它使用NFC注册设备间的触摸。我正在使用两个Nexus7进行测试 理想的用例是让应用程序在一台设备上处于活动状态,而不是在另一台设备上处于活动状态。主动设备推送NdefMessage,其中包含被动设备应用程序要处理的一些数据的记录。被动设备将包含一些数据的记录传回主动应用程序 我在清单中设置了以下意图过滤器: <activity android:name=".MainActivity" android:label="@string/title_ac

我正在创建一个Android应用程序,它使用NFC注册设备间的触摸。我正在使用两个Nexus7进行测试

理想的用例是让应用程序在一台设备上处于活动状态,而不是在另一台设备上处于活动状态。主动设备推送NdefMessage,其中包含被动设备应用程序要处理的一些数据的记录。被动设备将包含一些数据的记录传回主动应用程序

我在清单中设置了以下意图过滤器:

  <activity android:name=".MainActivity" android:label="@string/title_activity_main">
        <intent-filter>
          <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
          <data android:mimeType="application/com.killerapprejji.MainActivity"/>
          <data android:mimeType="application/com.*"/>
          <data android:mimeType="application/com.killerapprejji.*"/>
          <data android:mimeType="application/*"/>
          <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
  </activity>
我为onNewIntent提供了以下信息:

protected void onNewIntent(Intent intent) {
    // NDEF exchange mode
    Log.d("onNewIntent", intent.getAction());
    if (NfcAdapter.ACTION_NDEF_DISCOVERED == (intent.getAction())) {
        NdefMessage[] msgs = getNdefMessages(intent);
        for(int i = 0; i < msgs.length; i++){
            Log.d("onNewIntent", "found new NdefMessage");
        }
     }

    finish();
}
希望它设置NDEFPUSH消息。每当我触摸将这两台设备置于NFC范围内时,我仍然只能得到可选的“触摸到光束”界面

关于我如何获取这些意图,或者我的NdefMessage是否像我期望的那样被发送,有什么想法吗?

谷歌定义的“触动光束”消息是推送你期望在setNdefPushMessage上共享的NDEF消息,因此在推送该屏幕之前,不会向其他设备发送任何内容

事实上,您从Android使用的API称为Android BEAM

另一方面,如果一台设备正在推送NDEF消息,在您停止推送之前,它无法接收消息,因此您必须实现NDefPushCallback,以捕获成功发送的NDEF消息,停止推送第一台设备,然后它将能够接收新的意图(收到来自其他设备的NDEF消息)


我建议您首先使用URI mime类型或纯文本(一些简单的东西)制作一个测试应用程序,以确保您的“共享逻辑”正常。确认后,您可以回滚到自己的mime类型message是Google定义的一个,用于推送NDEF消息,您希望在setNdefPushMessage上共享该消息,因此,在推送该屏幕之前,不会向其他设备发送任何内容

事实上,您从Android使用的API称为Android BEAM

另一方面,如果一台设备正在推送NDEF消息,在您停止推送之前,它无法接收消息,因此您必须实现NDefPushCallback,以捕获成功发送的NDEF消息,停止推送第一台设备,然后它将能够接收新的意图(收到来自其他设备的NDEF消息)



我建议您首先使用URI mime类型或纯文本(一些简单的东西)创建一个测试应用程序,以确保您的“共享逻辑”可以。确认后,您可以回滚到自己的mime类型

是否确定在推送?链接到文档?一个活动一次只能推送一条NDEF消息,因此setNdefPushMessageCallback()优先于setNdefPushMessage()传送数据的活动必须位于前台。两台设备的屏幕必须解锁。如果您的活动启用Android Beam并且位于前台,则标准的intent dispatch系统将被禁用。但是,如果您的活动也启用前台dispatch,则它仍然可以扫描与intent筛选器匹配的标记t在前台调度。因此,当我在一台设备上运行应用程序时,启动beam,应用程序会在空闲设备上弹出,这意味着我的意图正在被过滤?我不是100%确定,但我在使用两个Nexus S为我开发一个小应用程序时遇到了同样的问题,在停止之前,我从未在推送Nexus上收到ndef消息foregroundDispatch on Ita是否确实在推送?链接到文档?时无法接收消息?活动一次只能推送一条NDEF消息,因此setNdefPushMessageCallback()优先于setNdefPushMessage()传送数据的活动必须位于前台。两台设备的屏幕必须解锁。如果您的活动启用Android Beam并且位于前台,则标准的intent dispatch系统将被禁用。但是,如果您的活动也启用前台dispatch,则它仍然可以扫描与intent筛选器匹配的标记t在前台调度。因此,当我在一台设备上运行应用程序时,启动beam,应用程序会在空闲设备上弹出,这意味着我的意图正在被过滤?我不是100%确定,但我在使用两个Nexus S为我开发一个小应用程序时遇到了同样的问题,在停止之前,我从未在推送Nexus上收到ndef消息前传
protected void onNewIntent(Intent intent) {
    // NDEF exchange mode
    Log.d("onNewIntent", intent.getAction());
    if (NfcAdapter.ACTION_NDEF_DISCOVERED == (intent.getAction())) {
        NdefMessage[] msgs = getNdefMessages(intent);
        for(int i = 0; i < msgs.length; i++){
            Log.d("onNewIntent", "found new NdefMessage");
        }
     }

    finish();
}
public void setIdleMessage(){
    InteractionHistory intHist = InteractionHistory.getInstance();
    NdefMessage attackNdefMessage = null;
    NdefRecord[] ndefRecords = new NdefRecord[10];
    ndefRecords[0] = NdefRecord.createMime("application/com.killerapprejji.NfcHandle", new String("attack,attacker:"
            + intHist.getDisplayName() 
            + ",attackerid:" + "1").getBytes());
    attackNdefMessage = new NdefMessage(ndefRecords[0]);
    // need to come up with a way to end if the above try/catch fails
    mNfcAdapter.setNdefPushMessage(attackNdefMessage, this);
}