Разрешение NFCEE_ADMIN является уровнем подписи. Однако можно ли "обмануть" получить это разрешение на корневом телефоне? Может быть, используя технику, подобную методу ClockSync?
Я пытаюсь использовать методы рефлексии для доступа к NFCExtras:
mAdapter = NfcAdapter.getDefaultAdapter(this);
try {
Class mynfcextras = Class.forName("android.nfc.INfcAdapterExtras");
Method getnfcExtras = mAdapter.getClass().getMethod("getNfcAdapterExtrasInterface");
Object nfcExtras = getnfcExtras.invoke(mAdapter);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Но, конечно, получите следующую ошибку: "Требуется разрешение NFCEE_ADMIN: ни пользователь xxx, ни текущий процесс не имеют com.android.nfc.permission.NFCEE_ADMIN."
Изменение: Конечно, я добавил разрешение на пакет, но он удаляется во время установки:
W/PackageManager( XXX): Not granting permission com.android.nfc.permission.NFCEE_ADMIN to package XXX (protectionLevel=2 flags=0x8be46)
Подпись вашего приложения должна быть в /system/etc/nfcee_access.xml
. См. Например, http://code.google.com/p/seek-for-android/wiki/BuildingTheSystem для примера, как его создать.