gpt4 book ai didi

android - 扫描 NFC Tag 时不调用 onNewIntent 方法

转载 作者:行者123 更新时间:2023-11-30 05:07:54 34 4
gpt4 key购买 nike

当我用手机扫描 NFC 标签时,onNewIntent() 方法没有被调用。它只是打开一个栏,我可以在其中选择应该处理扫描的应用程序,但即使我在那里选择我的应用程序,也不会执行 onNewIntent() 方法。

我已经尝试将 NFC 标签处理放在一个名为 performTagOperations() 的额外方法中,

主要 Activity :

public class MainActivity extends AppCompatActivity {
TextView mtv1;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mtv1 = findViewById(R.id.tv1);
mtv1.setText("Hallo");
performTagOperations(getIntent());
}

@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
Toast.makeText(this,"Intent",Toast.LENGTH_LONG).show();
mtv1.setText("Intent");
performTagOperations(intent);
}

private void performTagOperations(Intent intent){
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
Log.d("NFC",tag.toString());
Parcelable[] rawMessages =
intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if (rawMessages != null) {
NdefMessage[] messages = new NdefMessage[rawMessages.length];
for (int i = 0; i < rawMessages.length; i++) {
messages[i] = (NdefMessage) rawMessages[i];
}
// Process the messages array.
for (NdefMessage n:
messages) {
Log.d("NFC", n.toString());
}
}
}
}
}

安卓 list :

<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc"/>


<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.nfc.action.TECH_DISCOVERED" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tech_filter" />
</activity>
</application>

nfc_tech_filter:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<tech-list>
<tech>android.nfc.tech.Ndef</tech>
<!-- class name -->
</tech-list>
</resources>

它应该在扫描标签时执行onNewIntent()方法,但它没有执行。

最佳答案

您已注册接收 NFC Intent android.nfc.action.<b>TECH_</b>DISCOVERED在你的 list 中。然而,在 performTagOperations()您希望收到 android.nfc.action.<b>NDEF_</b>DISCOVERED (NfcAdapter.ACTION_<b>NDEF_</b>DISCOVERED)。因此,该 IF 语句中的代码永远不会执行。您必须将其更改为

if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction())) {
}

或者更好的是,为适合您的标签的 NDEF 数据类型注册一个 Intent 过滤器。

另请注意 onNewIntent()只有当你的 Activity 已经在运行时才会被调用。如果您的 Activity 是由 NFC Intent 创建的,您可以获取 Intent ,例如onCreate()相反。

关于android - 扫描 NFC Tag 时不调用 onNewIntent 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54223733/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com