我在我的Activity中实现了NFC前台调度。当我运行 Android 4.2.1 设备(Samsung Galaxy Nexus)时,代码运行正常。 但当我在 Android 2.3.5 设备(HTC Desire S)上运行时,会出现 NullPointerException 。以下是我的Activity的一些代码,onResume()
部分中引发了异常:
public class MainActivity extends Activity{
private NfcAdapter mAdapter;
private IntentFilter[] intentFilterArray;
private PendingIntent pendingIntent;
private String[][] techArray;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mAdapter = NfcAdapter.getDefaultAdapter(this);
pendingIntent = PendingIntent.getActivity(
this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
IntentFilter intentFilter = new IntentFilter(NfcAdapter.ACTION_TECH_DISCOVERED);
intentFilterArray = new IntentFilter[]{intentFilter};
techArray = new String[][]{new String[]{NdefFormatable.class.getName(), NfcA.class.getName()}};
}
@Override
protected void onResume(){
super.onResume();
//NullPointerException here,because mAdapter is Null, why?
mAdapter.enableForegroundDispatch(this, pendingIntent, intentFilterArray, techArray);
}
@Override
public void onPause() {
super.onPause();
mAdapter.disableForegroundDispatch(this);
}
...
}
在 Android 2.3.5 设备上,(LogCat告诉我),当呼叫onResume()
时,mAdapter.enableForegroundDispatch(…)
中会发生 NullPointerException 。我查了一下,这是因为mAdapter
null 。为什么?
答案 0 :(得分:3)
这是因为如果手机上没有NFC,getDefaultAdapter
方法会返回null,如http://developer.android.com/reference/android/nfc/NfcAdapter.html#getDefaultAdapter(android.content.Context)