菜单Intent跳转NFC扫描页面时APP崩溃问题求助
这种无报错的启动崩溃确实挺棘手的,我之前做NFC相关APP时也踩过类似的坑,给你列几个优先排查的点:
先抓崩溃日志(最关键):
别被“无报错信息”迷惑,Android系统肯定会记录崩溃堆栈的。打开Android Studio的Logcat,过滤AndroidRuntime标签,或者用命令行执行adb logcat -s AndroidRuntime,然后点击跳转按钮触发崩溃,就能看到具体的异常信息——比如空指针、类未初始化、权限问题之类的,这是定位问题最快的方式。检查NFC扫描页面的初始化逻辑:
大概率是添加NFC代码后,在页面启动(比如onCreate)时调用了未做判空的NFC对象。比如获取NfcAdapter时:NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this); // 这里如果设备不支持NFC,nfcAdapter会是null,直接调用后续方法就会崩溃 nfcAdapter.enableForegroundDispatch(...);一定要先判断
nfcAdapter != null,如果为null,要给用户提示“设备不支持NFC”,而不是继续执行NFC相关操作。核对Manifest配置:
添加NFC功能后,有没有补全必要的权限和配置?- 必须加NFC权限:
<uses-permission android:name="android.permission.NFC" /> - 如果你的APP不强制要求NFC设备,要加
<uses-feature android:name="android.hardware.nfc" android:required="false" />,否则在无NFC的设备上可能启动异常 - 检查扫描页面的Activity有没有错误的intent-filter配置,比如误加了冲突的NFC相关action,导致Activity启动时解析Intent出错
- 必须加NFC权限:
确认Intent跳转代码未被误改:
虽然之前是好的,但添加NFC代码时会不会不小心修改了跳转的目标Activity?比如类名拼写错误、或者把Activity移到别的包下但Intent里的类路径没更新。比如:// 检查这里的NfcScanActivity是不是正确的类 Intent scanIntent = new Intent(MainActivity.this, NfcScanActivity.class); startActivity(scanIntent);排查NFC前台调度的时机:
如果你在扫描页面用了enableForegroundDispatch,要确保是在onResume里调用,onPause里调用disableForegroundDispatch。如果在onCreate里就调用,可能因为Activity还没完全初始化导致崩溃。
内容的提问来源于stack exchange,提问作者Kristian M

