"收集新标签"而不是阅读应用程序的标签 - NFC android

Dos*_*i89 4 java tags android nfc nexus-s

我有一个课程,它创建了对NFC和两个活动的连接.它们都创建了该类的对象,因此可以连接到NFC.早些时候它以某种方式工作但现在我遇到了问题 - 我的应用程序在NewIntent上没有做任何事情,即使在第一个活动上也是如此.而不是它,我可以从内置应用程序"标签"(Nexus S)中看到"收集新标签".

我该怎么办?

类:

public NFCForegroundUtil(Activity activity)
{
    super();
    this.activity = activity;
    mAdapter = NfcAdapter.getDefaultAdapter(activity
            .getApplicationContext());

    mPendingIntent = PendingIntent.getActivity(activity, 0, new Intent(
            activity, activity.getClass())
            .addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

    IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
    IntentFilter ndef2 = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
    IntentFilter ndef3 = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);

    try
    {
        ndef2.addDataType("*/*");
    }
    catch (MalformedMimeTypeException e)
    {
        throw new RuntimeException("fail", e);
    }

    mFilters = new IntentFilter[] {ndef, ndef2, ndef3 };

    mTechLists = new String[][] { new String[] {
            // android.nfc.tech.NfcV.class.getName(),
            android.nfc.tech.NfcA.class.getName(),
            android.nfc.tech.IsoDep.class.getName() } };

    mAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters, mTechLists);

}
Run Code Online (Sandbox Code Playgroud)

活动1:

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    nfcForegroundUtil = new NFCForegroundUtil(this);

}

 @Override
protected void onNewIntent(Intent intent)
{

    super.onNewIntent(intent);
    Intent i = new Intent(this, NfcDisplayLabelActivity2.class);
    startActivity(i);

 }
Run Code Online (Sandbox Code Playgroud)

Raj*_*mar 7

转到设置 - >应用程序 - >全部 - >标签(在我的情况下) - >禁用


Mag*_*eth 5

当我尝试从 NFC 标签打开我的应用程序时,我遇到了类似的问题。我在 AndroidManifest.xml 中为方案“magicnfc”注册了一个意图过滤器,但它打开了 Android OS Tags 应用程序而不是我的应用程序。

我发现 NFC 意图(在我的例子中为 TECH_DISCOVERED)比基于通用方案的意图过滤器具有更高的优先级。因为标签应用程序注册了 TECH_DISCOVERED,所以它被打开而不是我的。

幸运的是,应用程序可以注册 NDEF_DISCOVERED(更高优先级的过滤器)并打开而不是标签应用程序。

当我点击标签时,这使得我的应用程序打开。

更多信息在这里: http ://developer.android.com/guide/topics/connectivity/nfc/nfc.html

但我发现我必须重写 onNewIntent 函数,代码如下:

if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
    String uri = intent.getDataString();

    Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
    if (rawMsgs != null) {
        msgs = new NdefMessage[rawMsgs.length];
        for (int i = 0; i < rawMsgs.length; i++) {
            msgs[i] = (NdefMessage) rawMsgs[i];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

对我来说,我所需要的只是:

String uri = intent.getDataString();
Run Code Online (Sandbox Code Playgroud)

祝你好运!


Dos*_*i89 -5

我从名为“标签”的内置应用程序中看到“收集了新标签”,因为我的应用程序无法正常工作。

当它正常工作时,它的优先级高于“标签”,并且手机从我的应用程序读取标签。但是,当它工作不正常并且手机收集标签时,“标签”应用程序将被激活,并且“标签”应用程序与我的设备进行通信。

修复代码后,我的应用程序具有更高的优先级,手机使用我的应用程序读取标签。

  • 这个答案中确实没有任何有用的数据。简单地说“哦,我纠正了我的应用程序,现在它可以工作了”并不能告诉社区任何有关应用程序是如何纠正的以及您最初做错了什么的信息。 (8认同)