Android O - fingerprint gesture callback not working

匿名 (未验证) 提交于 2019-12-03 01:18:02

问题:

I am testing on Pixel device with Fingerprint Gestures ON from accessibility. I am trying to get the gesture callbacks using FingerprintGestureController but never getting any gestures in return even after I turn the accessibility ON for this app from Settings->Accessibility. isGestureDetectionAvailable() is always returning false to me. Can someone please help.

Here is the 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);     }   } 

回答1:

Found the answer. I needed this one flag too in xml:

android:accessibilityFlags="flagDefault|flagRequestFingerprintGestures" 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!