为了账号安全,请及时绑定邮箱和手机立即绑定

当应用程序关闭时,Android NFC 总是调用 onCreate

当应用程序关闭时,Android NFC 总是调用 onCreate

动漫人物 2023-06-21 13:42:04
我制作了检测 nfc 标签的应用程序。一切正常,当我的应用程序关闭并且我用手机扫描 nfc 标签时,它向我显示一个具有 onCreate() 方法的活动,当我再次扫描它的第二次工作时,我不知道我的生命周期是否错误应用程序或者我在代码中遗漏了什么?当我打开应用程序时,扫描正在工作:应用程序关闭时的第一张照片第二张照片:来自第二张照片,但在第二次扫描中它有效这是我的代码public class NfcActivity extends AppCompatActivity {    private static final String TAG = "NfcActivity";    private NfcAdapter mNfcAdapter;    private TextView mTextView;    PendingIntent pendingIntent;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_nfc);        mTextView = findViewById(R.id.tv_nfc_detail);        mNfcAdapter = NfcAdapter.getDefaultAdapter(getApplicationContext());        if (mNfcAdapter == null) {            Toast.makeText(this, "Cet appareil ne supporte pas nfc", Toast.LENGTH_SHORT).show();            finish();            return;        }        if (!mNfcAdapter.isEnabled()) {            startActivity(new Intent("android.settings.NFC_SETTINGS"));            Toast.makeText(this, "Activer nfc", Toast.LENGTH_SHORT).show();        }        pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,            getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);    }    @Override    protected void onPause() {        super.onPause();        mNfcAdapter.disableForegroundDispatch(this);    }    @Override    protected void onResume() {        super.onResume();        pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,            getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);        IntentFilter[] intentFilters = new IntentFilter[]{};        mNfcAdapter.enableForegroundDispatch(this, pendingIntent, intentFilters, null);    }
查看完整描述

1 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

您只是在第二次处理意图。

添加一个基于您当前onNewIntent()方法的新方法,如下所示:

private void onNewNfcTag(Intent intent) {

    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())

            || NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction()) 

            || NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) {

        Tag iTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

        mTextView.setText(TagReader.readTag(iTag, intent));

    }

}

更改您的onNewIntent()名称以调用此新方法:


@Override

protected void onNewIntent(Intent intent) {

    super.onNewIntent(intent);

    onNewNfcTag(intent);

}

onCreate()从intent from调用这个相同的方法getIntent():


@Override

protected void onCreate(Bundle savedInstanceState) {

    // .... your code already here

    onNewNfcTag(getIntent());

}


查看完整回答
反对 回复 2023-06-21
  • 1 回答
  • 0 关注
  • 138 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信