android - 从自定义服务使用 FingerprintService

标签 android android-service android-fingerprint-api

背景

我有一个小应用程序,我想在其中添加指纹身份验证。此身份验证仅用于解锁应用。

重要的是:

  • 该应用的要点是作为服务在后台运行。
  • 用户必须能够从系统中的任何地方(而不仅仅是从 Activity 中)解锁应用。
  • 用户必须触摸通知才能启动服务,从而启动指纹认证。

问题

FingerprintService 必须从前台Activity 启动。即使我使用 startForeground() 将服务置于前台,FingerprintService 也会发出警告:

01-01 23:22:11.015 1576-1576/system_process W/FingerprintService: Rejecting com.package.myapp ; not in foreground
01-01 23:22:11.015 1576-1576/system_process V/FingerprintService: authenticate(): reject com.package.myapp

只有当我在应用程序外部(例如,在主屏幕中)触摸通知时才会发生这种情况。如果我在应用程序中触摸它,则身份验证有效并且我能够使用我的指纹解锁(因为 Acticity 已聚焦,在前台)。

我当前的代码(只有相关部分)

Activity中,显示启动服务的通知:

// NofityManager is a factory class that returns a configured Builder
NotificationCompat.Builder builder = NotifyManager.getBuilder(this);
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(SERVICE_NOTIFICATION_ID, builder.build());

服务启动后,将其置于前台并启动指纹认证:

@Override
public void onCreate()
{
    NotificationCompat.Builder builder = NotifyManager.getBuilder(this)
        .setContentTitle(getString(R.string.notification_title2))
        .setContentText(getString(R.string.notification_text));

    startForeground(FOREGROUND_NOTIFICATION_ID, builder.build());

    // this is the class that I use to setup the FingerprintService
    // and call authenticate()
    fingerprintValidator = new FingerprintValidator(this);

    if(fingerprintValidator.check(false))
    {
        try
        {
            fingerprintValidator.startService(this);
        }
        catch(RuntimeException ex)
        {
            Log.d(TAG, ex.getLocalizedMessage() + "\n" + ex.getStackTrace().toString());
        }
    }
    else
    {
        // notify the user
    }
}

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
    return START_STICKY;
}

问题

如何从在前台运行的自定义服务中使用 FingerprintService?我知道这是可能的,因为我看到另一个应用程序这样做,所以一定是一种方式。

最佳答案

让您的通知启动运行指纹传感器的 Activity,然后启动您的服务。

关于android - 从自定义服务使用 FingerprintService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41420159/

相关文章:

android - 无法解析符号(上下文)

android - 以编程方式更改 ListView 项目的引力

java - 通过套接字从 Android 客户端向 Java 服务器发送图像时数据丢失

java - 如何在退出/暂停应用程序时暂停背景音乐服务?

Android:致命异常:java.lang.NoClassDefFoundError(三星 4.4.2)

android - 如何使用 NotificationCompat.Builder 和 startForeground?

android - 如果客户端的进程被android杀死了,我们会不会泄露android服务连接?

安卓指纹 : hasEnrolledFingerprints triggers exception on some Samsungs

android - 如何在 Android 设备中使用 native 指纹扫描仪 UI?

证书指纹无效?