Hilt Inject Activity для BiometricPromptAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Hilt Inject Activity для BiometricPrompt

Сообщение Anonymous »

Я использую Hilt для DI, и внутри класса мне нужно действие, чтобы отобразить биометрическую подсказку.
class BiometricPromptManagerImpl(
private val activity: AppCompatActivity
) : BiometricPromptManager {

fun showBiometricPrompt(...) {
val prompt = BiometricPrompt(
activity,
...
)
}

}

При таком подходе при вызове Prompt.authenticate() я получаю исключение:
java.lang.IllegalStateException: Your activity is not yet attached to the Application instance. Y o u c a n ' t r e q u e s t V i e w M o d e l b e f o r e o n C r e a t e c a l l . < b r / > a t a n d r o i d x . a c t i v i t y . C o m p o n e n t A c t i v i t y . g e t V i e w M o d e l S t o r e ( C o m p o n e n t A c t i v i t y . k t : 5 4 3 ) < b r / > a t a n d r o i d x . l i f e c y c l e . V i e w M o d e l P r o v i d e r . & l t ; i n i t & g t ; ( V i e w M o d e l P r o v i d e r . a n d r o i d . k t : 6 6 ) < b r / > a t a n d r o i d x . b i o m e t r i c . B i o m e t r i c P r o m p t . g e t V i e w M o d e l ( B i o m e t r i c P r o m p t . j a v a : 1 0 2 7 ) < b r / > a t a n d r o i d x . b i o m e t r i c . B i o m e t r i c P r o m p t . & l t ; i n i t & g t ; ( B i o m e t r i c P r o m p t . j a v a : 7 7 0 ) < b r / > a t B i o m e t r i c P r o m p t M a n a g e r I m p l . s h o w B i o m e t r i c P r o m p t ( B i o m e t r i c P r o m p t M a n a g e r I m p l . k t : 2 8 ) < b r / > a t B i o m e t r i c M a n a g e r I m p l . s e t B i o m e t r i c E n a b l e d ( B i o m e t r i c M a n a g e r I m p l . k t : 4 0 ) < b r / > a t S e c u r i t y S e t t i n g s V i e w M o d e l $ s e t B i o m e t r i c E n a b l e d $ 1 . i n v o k e S u s p e n d ( S e c u r i t y S e t t i n g s V i e w M o d e l . k t : 6 1 ) < b r / > a t k o t l i n . c o r o u t i n e s . j v m . i n t e r n a l . B a s e C o n t i n u a t i o n I m p l . r e s u m e W i t h ( C o n t i n u a t i o n I m p l . k t : 3 3 ) < b r / > a t k o t l i n x . c o r o u t i n e s . i n t e r n a l . D i s p a t c h e d C o n t i n u a t i o n K t . r e s u m e C a n c e l l a b l e W i t h ( D i s p a t c h e d C o n t i n u a t i o n . k t : 3 6 7 ) < b r / > a t k o t l i n x . c o r o u t i n e s . i n t r i n s i c s . C a n c e l l a b l e K t . s t a r t C o r o u t i n e C a n c e l l a b l e ( C a n c e l l a b l e . k t : 3 0 ) < b r / > a t k o t l i n x . c o r o u t i n e s . i n t r i n s i c s . C a n c e l l a b l e K t . s t a r t C o r o u t i n e C a n c e l l a b l e $ d e f a u l t ( C a n c e l l a b l e . k t : 2 5 ) < b r / > a t k o t l i n x . c o r o u t i n e s . C o r o u t i n e S t a r t . i n v o k e ( C o r o u t i n e S t a r t . k t : 1 1 0 ) < b r / > a t k o t l i n x . c o r o u t i n e s . A b s t r a c t C o r o u t i n e . s t a r t ( A b s t r a c t C o r o u t i n e . k t : 1 2 6 ) < b r / > a t k o t l i n x . c o r o u t i n e s . B u i l d e r s K t _ _ B u i l d e r s _ c o m m o n K t . l a u n c h ( B u i l d e r s . c o m m o n . k t : 5 6 ) < b r / > a t k o t l i n x . c o r o u t i n e s . B u i l d e r s K t . l a u n c h ( U n k n o w n S o u r c e : 1 ) < b r / > a t k o t l i n x . c o r o u t i n e s . B u i l d e r s K t _ _ B u i l d e r s _ c o m m o n K t . l a u n c h $ d e f a u l t ( B u i l d e r s . c o m m o n . k t : 4 7 ) < b r / > a t k o t l i n x . c o r o u t i n e s . B u i l d e r s K t . l a u n c h $ d e f a u l t ( U n k n o w n S o u r c e : 1 ) < b r / > a t S e c u r i t y S e t t i n g s V i e w M o d e l . s e t B i o m e t r i c E n a b l e d ( S e c u r i t y S e t t i n g s V i e w M o d e l . k t : 5 8 ) < b r / > a t S e c u r i t y S e t t i n g s K t . S e c u r i t y S e t t i n g s $ l a m b d a $ 4 $ l a m b d a $ 3 ( S e c u r i t y S e t t i n g s . k t : 4 2 ) < b r / > a t S e c u r i t y S e t t i n g s K t . $ r 8 $ l a m b d a $ V s 8 c N 5 z b - p H p M Q o W h 8 t j F W F D D y 4 ( U n k n o w n S o u r c e : 0 ) < b r / > a t S e c u r i t y S e t t i n g s K t $ $ E x t e r n a l S y n t h e t i c L a m b d a 6 . i n v o k e ( D 8 $ $ S y n t h e t i c C l a s s : 0 ) < b r / > a t S e c u r i t y S e t t i n g s K t . B i o m e t r i c S w i t c h $ l a m b d a $ 1 2 $ l a m b d a $ 1 1 $ l a m b d a $ 1 0 ( S e c u r i t y S e t t i n g s . k t : 1 1 1 ) < b r / > a t S e c u r i t y S e t t i n g s K t . $ r 8 $ l a m b d a $ 9 J - j x c Y v O y b E e 4 9 a X a a 3 3 x 9 F G c A ( U n k n o w n S o u r c e : 0 ) < b r / > a t S e c u r i t y S e t t i n g s K t $ $ E x t e r n a l S y n t h e t i c L a m b d a 1 0 . i n v o k e ( D 8 $ $ S y n t h e t i c C l a s s : 0 ) < b r / > a t a n d r o i d x . c o m p o s e . f o u n d a t i o n . s e l e c t i o n . T o g g l e a b l e N o d e $ 1 . i n v o k e ( T o g g l e a b l e . k t : 2 2 9 ) < b r / > a t a n d r o i d x . c o m p o s e . f o u n d a t i o n . s e l e c t i o n . T o g g l e a b l e N o d e $ 1 . i n v o k e ( T o g g l e a b l e . k t : 2 2 9 ) < b r / > a t a n d r o i d x . c o m p o s e . f o u n d a t i o n . C l i c k a b l e N o d e $ c l i c k P o i n t e r I n p u t $ 3 . i n v o k e - k - 4 l Q 0 M ( C l i c k a b l e . k t : 6 3 9 ) < b r / > a t a n d r o i d x . c o m p o s e . f o u n d a t i o n . C l i c k a b l e N o d e $ c l i c k P o i n t e r I n p u t $ 3 . i n v o k e ( C l i c k a b l e . k t : 6 3 3 ) < b r / > a t a n d r o i d x . c o m p o s e . f o u n d a t i o n . g e s t u r e s . T a p G e s t u r e D e t e c t o r K t $ d e t e c t T a p A n d P r e s s $ 2 $ 1 . i n v o k e S u s p e n d ( T a p G e s t u r e D e t e c t o r . k t : 2 5 5 ) < b r / > a t k o t l i n . c o r o u t i n e s . j v m . i n t e r n a l . B a s e C o n t i n u a t i o n I m p l . r e s u m e W i t h ( C o n t i n u a t i o n I m p l . k t : 3 3 ) < b r / > a t k o t l i n x . c o r o u t i n e s . D i s p a t c h e d T a s k K t . r e s u m e ( D i s p a t c h e d T a s k . k t : 1 7 9 ) < b r / > a t k o t l i n x . c o r o u t i n e s . D i s p a t c h e d T a s k K t . d i s p a t c h ( D i s p a t c h e d T a s k . k t : 1 6 8 ) < b r / > a t k o t l i n x . c o r o u t i n e s . C a n c e l l a b l e C o n t i n u a t i o n I m p l . d i s p a t c h R e s u m e ( C a n c e l l a b l e C o n t i n u a t i o n I m p l . k t : 4 7 4 ) < b r / > a t k o t l i n x . c o r o u t i n e s . C a n c e l l a b l e C o n t i n u a t i o n I m p l . r e s u m e I m p l ( C a n c e l l a b l e C o n t i n u a t i o n I m p l . k t : 5 0 8 ) < b r / > a t k o t l i n x . c o r o u t i n e s . C a n c e l l a b l e C o n t i n u a t i o n I m p l . r e s u m e I m p l $ d e f a u l t ( C a n c e l l a b l e C o n t i n u a t i o n I m p l . k t : 4 9 7 ) < b r / > a t k o t l i n x . c o r o u t i n e s . C a n c e l l a b l e C o n t i n u a t i o n I m p l . r e s u m e W i t h ( C a n c e l l a b l e C o n t i n u a t i o n I m p l . k t : 3 6 8 ) < b r / > a t a n d r o i d x . c o m p o s e . u i . i n p u t . p o i n t e r . S u s p e n d i n g P o i n t e r I n p u t M o d i f i e r N o d e I m p l $ P o i n t e r E v e n t H a n d l e r C o r o u t i n e . o f f e r P o i n t e r E v e n t ( S u s p e n d i n g P o i n t e r I n p u t F i l t e r . k t : 7 1 9 ) < b r / > a t a n d r o i d x . c o m p o s e . u i . i n p u t . p o i n t e r . S u s p e n d i n g P o i n t e r I n p u t M o d i f i e r N o d e I m p l . d i s p a t c h PointerEvent(SuspendingPointerInputFilter.kt:598)
at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl.onPointerEvent-H0pRuoY(SuspendingPointerInputFilter.kt:620)
at androidx.compose.foundation.AbstractClickableNode.onPointerEvent-H0pRuoY(Clickable.kt:1044)
at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:387)
at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:373)
at androidx.compose.ui.input.pointer.NodeParent.dispatchMainEventPass(HitPathTracker.kt:229)
at androidx.compose.ui.input.pointer.HitPathTracker.dispatchChanges(HitPathTracker.kt:144)
at androidx.compose.ui.input.pointer.PointerInputEventProcessor.process-BIzXfog(PointerInputEventProcessor.kt:120)
at androidx.compose.ui.platform.AndroidComposeView.sendMotionEvent-8iAsVTc(AndroidComposeView.android.kt:1994)
at androidx.compose.ui.platform.AndroidComposeView.handleMotionEvent-8iAsVTc(AndroidComposeView.android.kt:1945)
at androidx.compose.ui.platform.AndroidComposeView.dispatchTouchEvent(AndroidComposeView.android.kt:1829)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2803)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2803)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2803)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2803)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2803)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2803)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2803)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:458)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1981)
at android.app.Activity.dispatchTouchEvent(Activity.java:4533)
at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:416)
at android.view.View.dispatchPointerEvent(View.java:16737)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:7947)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:7710)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7106)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:7163)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:7129)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:7295)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:7137)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:7352)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7110)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:7163)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:7129)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:7137)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7110)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:10214)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:10165)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:10134)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:10356)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:295)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:346)
at android.os.Looper.loopOnce(Looper.java:189)
at android.os.Looper.loop(Looper.java:317)
at android.app.ActivityThread.main(ActivityThread.java:8705)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)

Возможным решением было бы передать действие из компонуемого объекта, но у меня есть некоторые опасения по поводу принципов чистой архитектуры.
Какое решение является лучшим решением? показать биометрическую подсказку?
Используйте
@Module
@InstallIn(SingletonComponent::class)
object MyModule {
@Provides
@Singleton
fun provideBiometricPromptManager(
activity: MainActivity
): BiometricPromptManager {
return BiometricPromptManagerImpl(activity)
}
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... tricprompt
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»