【问题标题】:Fingerprint crash on specific Samsung devices特定三星设备上的指纹崩溃
【发布时间】:2018-07-31 15:41:08
【问题描述】:

我最近发布了一个新应用,它支持通过指纹进行身份验证。

这在我们所有的测试设备上都运行良好:
- 一加三
- 一加五
- 三星 S6 Edge
- 三星 S7
- 三星 S8

但是当发布时,我们开始从 Fabric 中收到带有此堆栈跟踪的崩溃:

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.our.app/com.our.app.ui.LoginActivity}: java.lang.SecurityException: Permission Denial: getCurrentUser() from pid=30208, uid=10038 requires android.permission.INTERACT_ACROSS_USERS
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3319)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)
       at android.app.ActivityThread.access$1100(ActivityThread.java:229)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:148)
       at android.app.ActivityThread.main(ActivityThread.java:7325)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by java.lang.SecurityException: Permission Denial: getCurrentUser() from pid=30208, uid=10038 requires android.permission.INTERACT_ACROSS_USERS
       at android.os.Parcel.readException(Parcel.java:1620)
       at android.os.Parcel.readException(Parcel.java:1573)
       at android.hardware.fingerprint.IFingerprintService$Stub$Proxy.hasEnrolledFingerprints(IFingerprintService.java:503)
       at android.hardware.fingerprint.FingerprintManager.hasEnrolledFingerprints(FingerprintManager.java:776)
       at com.our.app.fingerprint.handler.FingerprintHandler.canUseFingerprint(SourceFile:65)
       at com.our.app.Client.canUseFingerprint(SourceFile:335)
       at com.our.app.ui.LoginActivity.updateViewVisibilityBasedOnState(SourceFile:501)
       at com.our.app.ui.LoginActivity.updateViewVisibilityBasedOnState(SourceFile:472)
       at com.our.app.ui.LoginActivity.continueWithOnCreateLogic(SourceFile:399)
       at com.our.app.ui.LoginActivity.onCreate(SourceFile:321)
       at android.app.Activity.performCreate(Activity.java:6904)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3266)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)
       at android.app.ActivityThread.access$1100(ActivityThread.java:229)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:148)
       at android.app.ActivityThread.main(ActivityThread.java:7325)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

根据 Fabric 的说法,这些设备正在经历崩溃:
- 银河 A5
- 银河 S5 迷你
- 银河 A3(2016)

他们都运行 Android 6.0.1。

看到它们都是三星设备,我开始怀疑 Knox 可能是问题所在,即使它没有在堆栈跟踪中的任何地方特别列出。但我不知道如何解决它或修复它。

我在三星自己的网站上发现了一个类似的问题,但没有修复:
https://seap.samsung.com/forum-topic/getting-javalangsecurityexception-permission-denial

堆栈跟踪中命名的权限是系统权限,任何用户应用都无法获得。只有系统应用可以。

有人知道如何解决这个问题吗?

【问题讨论】:

  • - Galaxy A5 - Galaxy S5 Mini - Galaxy A3(2016)这个设备有指纹触摸吗?
  • @KuLdipPaTel s5 mini 和 a3 有指纹扫描仪
  • 这个你搞定了吗?我们有同样的问题...
  • 我记得在设备重启后我第一次拨打 hasEnrolledFingerprints 时在 Galaxy S7 上收到了 SecurityExceptions。如果我在hasEnrolledFingerprints 之前调用isHardwareDetected,则不会发生异常。我无法再在该设备上重现该问题,但它现在运行的是 Android 7.0,我不记得我们得到它时它运行的是哪个 Android 版本。

标签: android fingerprint


【解决方案1】:

不确定您是否能够找到解决方案,作为一种解决方法,我只是将我们的调用封装在权限检查中。

inline val Activity.fingerprintManager: FingerprintManagerCompat?
  get() = (
    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.USE_FINGERPRINT) == PackageManager.PERMISSION_GRANTED) {
      FingerprintManagerCompat.from(this)
    } else { null }
  )

【讨论】:

    【解决方案2】:

    是的,我已经看到了这个崩溃。

    既然 INTERACT_WITH_USERS 是系统权限,难怪我们会崩溃。

    傻三星。

    将代码包装在 try/catch 中以获得 SecurityException。

    -肯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 2017-10-13
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多