summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Pelly <npelly@google.com>2010-10-18 12:00:48 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-10-18 12:00:48 -0700
commit1f90908c19ab24791bd54c856b32bb12682496eb (patch)
tree95a65d608ed8aae2eef9f7bcb5b307087aa5eed9
parentbc96c2848dadaa844f95e89708d9941f73bbf400 (diff)
parentfdf9086e24f4720ee9fbc852b980041f126aa3c2 (diff)
downloadframeworks_base-1f90908c19ab24791bd54c856b32bb12682496eb.zip
frameworks_base-1f90908c19ab24791bd54c856b32bb12682496eb.tar.gz
frameworks_base-1f90908c19ab24791bd54c856b32bb12682496eb.tar.bz2
Merge "Prevent use of NFC api if device is not featurized for NFC." into gingerbread
-rw-r--r--core/java/android/nfc/NfcAdapter.java32
1 files changed, 31 insertions, 1 deletions
diff --git a/core/java/android/nfc/NfcAdapter.java b/core/java/android/nfc/NfcAdapter.java
index 6f718d3..d76ac41 100644
--- a/core/java/android/nfc/NfcAdapter.java
+++ b/core/java/android/nfc/NfcAdapter.java
@@ -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;
@@ -152,6 +155,26 @@ public final class NfcAdapter {
}
/**
+ * 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>
* Most Android devices will only have one NFC Adapter (NFC Controller).
@@ -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;
}