Merge "Prevent use of NFC api if device is not featurized for NFC." into gingerbread

This commit is contained in:
Nick Pelly
2010-10-18 12:00:48 -07:00
committed by Android (Google) Code Review

View File

@@ -15,7 +15,10 @@ import java.lang.UnsupportedOperationException;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.app.ActivityThread;
import android.content.Context;
import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
import android.nfc.INfcAdapter;
import android.os.IBinder;
import android.os.RemoteException;
@@ -151,6 +154,26 @@ public final class NfcAdapter {
mService = service;
}
/**
* Helper to check if this device has FEATURE_NFC, but without using
* a context.
* Equivalent to
* context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC)
*/
private static boolean hasNfcFeature() {
IPackageManager pm = ActivityThread.getPackageManager();
if (pm == null) {
Log.e(TAG, "Cannot get package manager, assuming no NFC feature");
return false;
}
try {
return pm.hasSystemFeature(PackageManager.FEATURE_NFC);
} catch (RemoteException e) {
Log.e(TAG, "Package manager query failed, assuming no NFC feature", e);
return false;
}
}
/**
* Get a handle to the default NFC Adapter on this Android device.
* <p>
@@ -165,9 +188,16 @@ public final class NfcAdapter {
}
sIsInitialized = true;
/* is this device meant to have NFC */
if (!hasNfcFeature()) {
Log.v(TAG, "this device does not have NFC support");
return null;
}
/* get a handle to NFC service */
IBinder b = ServiceManager.getService("nfc");
if (b == null) {
Log.d(TAG, "NFC Service not available");
Log.e(TAG, "could not retrieve NFC service");
return null;
}