diff options
| -rw-r--r-- | core/java/android/nfc/NfcAdapter.java | 32 |
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; } |
