7

Je suis test sur l'appareil Pixel avec Gestes Fingerprint sur l'accessibilité. J'essaie d'obtenir les rappels gestes en utilisant FingerprintGestureController, mais je n'obtiens aucun geste en retour même après avoir activé l'accessibilité pour cette application à partir de Paramètres-> Accessibilité. isGestureDetectionAvailable() me renvoie toujours faux. Puis-je avoir une aide s'il vous plait.Android O-callback geste gestuel ne fonctionne pas

Voici le code:

my_gesture_service.xml

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" 
android:accessibilityFeedbackType="feedbackGeneric" 
android:accessibilityFlags="flagDefault" 
android:canRequestFingerprintGestures="true" /> 

AndroidManifest.xml

<uses-feature android:name="android.hardware.fingerprint"/> 
    <uses-permission android:name="android.permission.USE_FINGERPRINT" /> 
    <uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE"/> 
<service 
      android:name="android.gestures.MyService" 
      android:label="@string/app_name" 
      android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"> 
      <intent-filter> 
       <action android:name="android.accessibilityservice.AccessibilityService" /> 
      </intent-filter> 
      <meta-data 
       android:name="android.accessibilityservice" 
       android:resource="@xml/my_gesture_service" /> 
     </service> 

MyService.java

public class MyService extends AccessibilityService { 

    private static final String TAG = MyService.class.getSimpleName(); 

    @Override 
    public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent) { 
     Log.d(TAG, "onAccessibilityEvent"); 
    } 

    @Override 
    public void onInterrupt() { 
     Log.d(TAG, "onInterrupt"); 
    } 

    @Override 
    protected boolean onGesture(int gestureId) { 
     Log.d(TAG, "onGesture " + gestureId); 
     return super.onGesture(gestureId); 
    } 

    @Override 
    protected boolean onKeyEvent(KeyEvent event) { 
     Log.d(TAG, "onKeyEvent " + event.getKeyCode()); 
     return super.onKeyEvent(event); 
    } 

    @Override 
    public void onDestroy() { 
     Toast.makeText(getApplicationContext(), "onDestroy" , Toast.LENGTH_SHORT).show(); 
     super.onDestroy(); 
    } 



    @Override 
    protected void onServiceConnected() { 
     super.onServiceConnected(); 
     Log.d(TAG, "onServiceConnected"); 

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { 

      FingerprintGestureController gestureController = getFingerprintGestureController(); 

      Toast.makeText(getApplicationContext(), "Is available: " + gestureController.isGestureDetectionAvailable(), Toast.LENGTH_LONG).show(); 
      Log.e(TAG, "Is available: " + gestureController.isGestureDetectionAvailable()); 

      FingerprintGestureController.FingerprintGestureCallback callback = new 
        FingerprintGestureController.FingerprintGestureCallback() { 
         @Override 
         public void onGestureDetectionAvailabilityChanged(boolean available) { 
          super.onGestureDetectionAvailabilityChanged(available); 
          Toast.makeText(getApplicationContext(), "Gesture available change to: " + available, Toast.LENGTH_SHORT).show(); 
          Log.d(TAG, "onGestureDetectionAvailabilityChanged " + available); 
         } 

         @Override 
         public void onGestureDetected(int gesture) { 
          super.onGestureDetected(gesture); 
          Toast.makeText(getApplicationContext(), "Gesture: " + gesture, Toast.LENGTH_SHORT).show(); 
          Log.d(TAG, "onGestureDetected " + gesture); 
         } 
        }; 

      gestureController.registerFingerprintGestureCallback(callback, new Handler()); 
     } 
    } 

    @Override 
    public boolean onUnbind(Intent intent) { 
     Log.d(TAG, "onUnbind "); 
     return super.onUnbind(intent); 
    } 


} 

Répondre

9

J'ai trouvé la réponse. J'avais aussi besoin de ce drapeau en format XML:

android:accessibilityFlags="flagDefault|flagRequestFingerprintGestures"