FingerprintManager.isHardwareDetected()引发java.lang.SecurityException吗? [英] FingerprintManager.isHardwareDetected() throwing java.lang.SecurityException?

查看:302
本文介绍了FingerprintManager.isHardwareDetected()引发java.lang.SecurityException吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个应用程序,可以使用指纹进行身份验证。



在询问用户是否要启用它之前,我先验证该功能是否完全可用,并且可以通过以下方式完成:

  FingerprintManager FingerprintManager = context.getSystemService(FingerprintManager.class); 
返回FingerprintManager.isHardwareDetected()&& FingerprintManager.hasEnrolledFingerprints();

两个 FingerprintManager 的方法都带有以下注释:

  @RequiresPermission(USE_FINGERPRINT)

但是,如 normal 权限。 rel = nofollow> http://developer.android.com/guide/topics/security/normal-permissions.html 。这意味着,一旦您在 AndroidManifest.xml 文件中声明了该权限(我们这样做,就对功能进行了测试并可以在测试设备上运行),则不必在运行时检查它。 / p>

根据Fabric崩溃报告所报告的,现在正在发生的事情是某些用户在 fingerprintManager.isHardwareDetected()调用中崩溃了, / p>

  java.lang.SecurityException:必须具有android.permission.USE_FINGERPRINT权限。:用户10150和当前进程都没有android.permission。 USE_FINGERPRINT。 

到目前为止,这已经发生了2位用户,都是在棉花糖(Android 6.0)上,他们都没有扎根(据Fabric报道),设备为LG G4手写笔(LG H635)和Sony Xperia Z5 Premium(Sony E6853)。



对此的任何解释



如果这些用户不能使用普通的Android,我想说他们能够通过自定义ROM功能,例如CyanogenMod的Privacy Guard。



堆栈跟踪为:

 致命异常:java.lang.RuntimeException:无法启动活动ComponentInfo {MY.PACKAGE / MY.PACKAGE.MYACTIVITY}:java.lang.SecurityException:必须具有android.permission.USE_FINGERPRINT权限。:两个用户10150当前进程也没有android.permission.USE_FINGERPRINT。 
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2434)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
在android.app.ActivityThread.access $ 900(ActivityThread.java:157)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1356)
在android.os.Handler.dispatchMessage(Handler.java:102)
在android.os.Looper.loop(Looper.java:148)
在android.app.ActivityThread.main(ActivityThread.java:5527)
在java.lang.reflect.Method.invoke (Method.java)com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:730)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java :620)
由java.lang.SecurityException引起:必须具有android.permission.USE_FINGERPRINT权限。:用户10150和当前进程都没有android.permission.USE_FINGERPRINT。 android.os.Parcel.readException(Parcel.java:1599)中的
android.os.Parcel.readException(Parcel.java:1552)中的
android.hardware.fingerprint.IFingerprintService的
$ Stub $ Proxy.isHardwareDetected(IFingerprintService.java:367)
在android.hardware.fingerprint.FingerprintManager.isHardwareDetected(FingerprintManager.java:642)
在MY.PACKAGE.MYACTIVITY.isSupported(MYACTIVITY.java :54)MY.PACKAGE.MYACTIVITY.onCreate(MYACTIVITY.java:38)处
android.app.Activity.performCreate(Activity.java:6272)
处android.app。 Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
在android.app.ActivityThread.access $ 900(ActivityThread.java:157)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1356)
在android.os.Handler。 dispatchMessage( Handler.java:102)android.os.Looper.loop(Looper.java:148)
android.app.ActivityThread.main(ActivityThread.java:5527)Java
.lang.reflect.Method.invoke(Method.java)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:730)
在com.android.internal.os .ZygoteInit.main(ZygoteInit.java:620)


解决方案



到目前为止,我只能看到这两个受影响的用户各自在我们应用程序的不同版本上(我们每2周发布一次)



上次崩溃发生在3月17日。



我将其视为Android / Play商店权限故障。


I have an App that offers the usage of fingerprints for authentication.

Before asking if the user wants to enable it, I verify if it is available at all and it is done via:

FingerprintManager fingerprintManager = context.getSystemService(FingerprintManager.class);
return fingerprintManager.isHardwareDetected() && fingerprintManager.hasEnrolledFingerprints();

Both FingerprintManager's methods are annotated with:

@RequiresPermission(USE_FINGERPRINT)

But, the USE_FINGERPRINT permission is a normal one, as specified in http://developer.android.com/guide/topics/security/normal-permissions.html. Which means that, once you declare that permission in the AndroidManifest.xml file (which we do, the feature is tested and working on test devices) you don't have to check for it at runtime.

What is happening now, as reported by Fabric crash reports, is that some users are crashing on the fingerprintManager.isHardwareDetected() call with:

java.lang.SecurityException: Must have android.permission.USE_FINGERPRINT permission.: Neither user 10150 nor current process has android.permission.USE_FINGERPRINT.

It has happened so far with 2 users, both on Marshmallow (Android 6.0), neither of them rooted (as reported by Fabric) and the devices are the LG G4 Stylus(LG H635) and Sony Xperia Z5 Premium (Sony E6853).

Any explanations on how would this be possible and a possible fix for it?

If these users wouldn't be on vanilla Android, I'd say that they are being able to manipulate the App permission via a custom ROM feature like CyanogenMod's Privacy Guard. But that doesn't seem to be the case.

The stack trace is:

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{MY.PACKAGE/MY.PACKAGE.MYACTIVITY}: java.lang.SecurityException: Must have android.permission.USE_FINGERPRINT permission.: Neither user 10150 nor current process has android.permission.USE_FINGERPRINT.
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2434)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
   at android.app.ActivityThread.access$900(ActivityThread.java:157)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:148)
   at android.app.ActivityThread.main(ActivityThread.java:5527)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
Caused by java.lang.SecurityException: Must have android.permission.USE_FINGERPRINT permission.: Neither user 10150 nor current process has android.permission.USE_FINGERPRINT.
   at android.os.Parcel.readException(Parcel.java:1599)
   at android.os.Parcel.readException(Parcel.java:1552)
   at android.hardware.fingerprint.IFingerprintService$Stub$Proxy.isHardwareDetected(IFingerprintService.java:367)
   at android.hardware.fingerprint.FingerprintManager.isHardwareDetected(FingerprintManager.java:642)
   at MY.PACKAGE.MYACTIVITY.isSupported(MYACTIVITY.java:54)
   at MY.PACKAGE.MYACTIVITY.onCreate(MYACTIVITY.java:38)
   at android.app.Activity.performCreate(Activity.java:6272)
   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
   at android.app.ActivityThread.access$900(ActivityThread.java:157)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:148)
   at android.app.ActivityThread.main(ActivityThread.java:5527)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)

解决方案

The issue "automagically" stopped happening.

So far, I can only see those two affected users each one on a different version of our App (we publish every 2 weeks) and there was no change whatsoever in the App in regards to fingerprint permissions.

The last occurrence of the crash was on March 17th.

I see this as a Android/Play Store permissions glitch.

这篇关于FingerprintManager.isHardwareDetected()引发java.lang.SecurityException吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆