gpt4 book ai didi

java - 待定 Intent 总是进行新 Activity

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:01:23 26 4
gpt4 key购买 nike

我正在尝试制作具有 nfc 功能的应用程序。问题是当发现 nfc 标签时,挂起的 Intent 总是会产生一个已经存在的新 Activity 。我正在使用标签主机。如何在不进行新 Activity 的情况下进行 pendingintent。非常感谢。

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

mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
mNfcPendingIntent = PendingIntent.getActivity(this, 0,new Intent(this,
getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
}

protected void onResume() {
super.onResume();
mResumed = true;
// Sticky notes received from Android
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
NdefMessage[] messages = getNdefMessages(getIntent());
byte[] payload = messages[0].getRecords()[0].getPayload();
try { cekNfc(new String(payload)); }
catch (SQLException e) { e.printStackTrace(); }
catch (NoSuchAlgorithmException e) { e.printStackTrace(); }
catch (UnsupportedEncodingException e) { e.printStackTrace(); }

setIntent(new Intent());
}
enableNdefExchangeMode();
}
private void enableNdefExchangeMode() { mNfcAdapter.enableForegroundDispatch(this, mNfcPendingIntent, mNdefExchangeFilters, null); }

NdefMessage[] getNdefMessages(Intent intent) { // Parse the intent
NdefMessage[] msgs = null;
String action = intent.getAction();
//jika ada action
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
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]; }
}
}
return msgs;
}


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

mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
mNfcPendingIntent = PendingIntent.getActivity(this, 0,new Intent(this,
getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
}

protected void onResume() {
super.onResume();
mResumed = true;
// Sticky notes received from Android
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
NdefMessage[] messages = getNdefMessages(getIntent());
byte[] payload = messages[0].getRecords()[0].getPayload();
try { cekNfc(new String(payload)); }
catch (SQLException e) { e.printStackTrace(); }
catch (NoSuchAlgorithmException e) { e.printStackTrace(); }
catch (UnsupportedEncodingException e) { e.printStackTrace(); }

setIntent(new Intent());
}
enableNdefExchangeMode();
}
private void enableNdefExchangeMode() { mNfcAdapter.enableForegroundDispatch(this, mNfcPendingIntent, mNdefExchangeFilters, null); }

NdefMessage[] getNdefMessages(Intent intent) { // Parse the intent
NdefMessage[] msgs = null;
String action = intent.getAction();
//jika ada action
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
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]; }
}
}
return msgs;
}

最佳答案

android:launchMode="singleTask" 用于 list 中的 Activity (或多个 Activity )。这样就可以了。每当系统发送 NFC intent 时,总会创建一个新的 Activity。这对于 NFC Intent 是独一无二的。因此设置 android:launchMode="singleTop" 将不起作用,也不会在 PendingIntent 中设置标志。

另一个解决方案是使用 NfcAdapter.enableForegroundDispatch()在你所有的 Activity 中。这样您的应用就可以直接处理所有 NFC Intent (通过 onNewIntent())。

关于java - 待定 Intent 总是进行新 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10104110/

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