Merge "Prevent use of NFC api if device is not featurized for NFC." into gingerbread
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user