使用定制服务中的指纹服务



背景

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

重要的是:

  • 该应用的要点是在后台运行。
  • 用户必须能够从系统中的任何地方解锁应用程序(不仅是从活动中)。
  • 用户必须触摸通知以启动服务,因此启动指纹身份验证。

问题

必须从前景Activity启动FingerprintService。即使我用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?我知道这是可能的,因为我看到了另一个应用程序,所以必须是一种方法。

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

相关内容

  • 没有找到相关文章

最新更新