【发布时间】:2017-02-03 22:33:44
【问题描述】:
我需要检查设备上是否启用了卡模拟。我找到了一种方法here:
boolean isDefault = CardEmulation
.getInstance(NfcAdapter.getDefaultAdapter(this))
.isDefaultServiceForCategory(
new ComponentName(this, MyPaymentService.class),
CardEmulation.CATEGORY_PAYMENT);
这似乎适用于某些设备,但并非适用于所有设备。
例如,在三星 GT-I9300I(Android 4.4)上,有一个 NFC 模块,但它没有在设置中显示触碰付款选项。
当我的应用在该设备上运行时,我收到以下错误:
E/CardEmulation:此设备不支持卡仿真 09-26 16:41:13.592 2625-2625/? E/AndroidRuntime: 致命异常: main 进程:com.android.settings,PID:2625 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.android.settings/com.android.settings.nfc.PaymentDefaultDialog}:java.lang.UnsupportedOperationException 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2441) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2500) 在 android.app.ActivityThread.access$900(ActivityThread.java:171) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:146) 在 android.app.ActivityThread.main(ActivityThread.java:5679) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 在 dalvik.system.NativeStart.main(本机方法) 引起:java.lang.UnsupportedOperationException 在 android.nfc.cardemulation.CardEmulation.getInstance(CardEmulation.java:159) 在 com.android.settings.nfc.PaymentBackend.(PaymentBackend.java:53) 在 com.android.settings.nfc.PaymentDefaultDialog.onCreate(PaymentDefaultDialog.java:57) 在 android.app.Activity.performCreate(Activity.java:5582) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2405) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2500) 在 android.app.ActivityThread.access$900(ActivityThread.java:171) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:146) 在 android.app.ActivityThread.main(ActivityThread.java:5679) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) 在 dalvik.system.NativeStart.main(本机方法)但是,根据the documentation,CardEmulation 自 API 级别 19 (Android 4.4) 起可用。
那么任何人都可以解释为什么我会收到此异常吗?我该如何克服这个问题?
【问题讨论】:
标签: android nfc payment apdu hce