gpt4 book ai didi

java - 如何启动 NFC 标签发现的新 Activity ?

转载 作者:行者123 更新时间:2023-11-30 05:18:33 25 4
gpt4 key购买 nike

我正在编写一个代码,当扫描期间检测到 NFC 时,该代码应该在下一个 Activity (页面)上返回 NFC 标签值。这里发生的情况是,当我第一次启动应用程序时,第一页显示几分之一秒,然后直接移动到第二页( Activity )。

这是第一个 Activity 的代码段(仅用于要求用户点击进行扫描)

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
askPermissions();

mtxtViewNfcContent = (TextView) findViewById(R.id.text);
nfcAdapter = NfcAdapter.getDefaultAdapter(this);

if (nfcAdapter == null) {
Toast.makeText(this, "No NFC", Toast.LENGTH_SHORT).show();
finish();
return;
}

else {

Intent in = new Intent(Main2Activity.this, MainActivity.class);
startActivity(in);
}

我想要的是在启动时显示第一页,当用户点击 nfc 扫描时,在下一页(MainActivity)上显示输出。

PS:我是 Android 新手,请原谅我的代码。

最佳答案

到目前为止,您所做的就是在设备不支持 nfc 时退出应用程序,或者在设备支持 nfc 时启动另一个 Activity 。

您实际上根本没有监听任何标签。

这里有两种可能性:首先:在第一个 Activity 中读取 nfc 标签,然后创建一个新 Intent ,并将标签读取结果作为额外的 bundle 。

two :监听第一个 Activity 中标签的存在,然后将标签发送到第二个 Activity 并在第二个 Activity 中读取它。

我更喜欢第一个场景。

在第一个 Activity 上:

public class MainActivity extends AppCompatActivity {
private PendingIntent pendingIntent;
private IntentFilter[] writeTagFilters;
private NfcAdapter nfcAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.AppTheme);
setContentView(R.layout.activity_main);
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null) {
Toast.makeText(this, "No NFC", Toast.LENGTH_SHORT).show();
finish();
return;
}
setForeground();

}
private void setForeground() {
pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
IntentFilter tagDetected = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
tagDetected.addCategory(Intent.CATEGORY_DEFAULT);
writeTagFilters = new IntentFilter[]{tagDetected};
}
@Override
protected void onResume() {

super.onResume();
if (nfcAdapter != null) {
nfcAdapter.enableForegroundDispatch(this, pendingIntent, null, null);
}
processNfcTag(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}

@Override
protected void onPause() {

super.onPause();
if (nfcAdapter != null) {
nfcAdapter.disableForegroundDispatch(this);
}

}

private void processNfcTag(Intent intent) {
//TODO: here you should to check if this intent is an NFC Intent, in case it is an nfc intent you could read it according of tag tech you have
// for example MifareUltralight.
MifareUltralight mfu = MifareUltralight.get(intent.getParcelableExtra(NfcAdapter.EXTRA_TAG));
try {
mfu.connect();
byte [] bytes = mfu.readPages(pageNumber);
mfu.close();
} catch (IOException e) {
e.printStackTrace();

}
// then you could get this bytes and send it to the other activity
}

请检查此link了解如何在 Activity 之间发送数据。

p.s:你应该快速检查我写的代码。

关于java - 如何启动 NFC 标签发现的新 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59926675/

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