2017-06-07 9 views
0

アクセシビリティサービスを使用して画面上をスワイプします。 これを試しましたが、これはワンタッチでしかできません。 私はあなたがジェスチャーを実行するために、あなたのサービスを構成していることを確認してくださいなどを挟まAccessibilityServiceを使用して画面上でスワイプを実行します。

Point position=new Point(100,10); 
GestureDescription.Builder builder = new GestureDescription.Builder(); 
Path p = new Path(); 
p.moveTo(position.x, position.y); 
builder.addStroke(new GestureDescription.StrokeDescription(p, 100L, 50L)); 
GestureDescription gesture = builder.build(); 
boolean isDispatched = dispatchGesture(gesture,gestureResultCallback,null); 
+0

、アクセシビリティ設定情報ですか? –

+0

ok私は間違っていた可能性が高いですが、api 24が何かを追加したようです...私が言ったことを忘れてしまいました... 'dispatchGesture'は何を返しますか?正しいか間違っているか? – pskink

+0

それは本当に –

答えて

0

あなたには複数の問題があると思います。あなたのジェスチャーをどのように構築しているかは少しばかり、スワイプのために移動する必要があるピクセルの数は、あなたが思うよりも大きいです!私は特定のピクセル数ではなく、画面サイズに基づいてこれを計算します。私は典型的なスワイプのジェスチャーを画面の約半分、片側から他の側へ、中間の高さの賢明なものとして考えています。

Nexus 6でホーム画面1とホーム画面2の間で前後にバウンスする愚かな「onAccessibilityEvent」リスナーを設定しました。あなたは実際にそれを見るために明らかに設定された2つのホーム画面を持たなければなりません。また

@Override 
public void onAccessibilityEvent(AccessibilityEvent event) { 

    switch (event.getEventType()) { 
     case AccessibilityEvent.TYPE_ANNOUNCEMENT: 
      if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { 

       DisplayMetrics displayMetrics = getResources().getDisplayMetrics(); 

       int middleYValue = displayMetrics.heightPixels/2; 
       final int leftSideOfScreen = displayMetrics.widthPixels/4; 
       final int rightSizeOfScreen = leftSideOfScreen * 3; 
       GestureDescription.Builder gestureBuilder = new GestureDescription.Builder(); 
       Path path = new Path(); 

       if (event.getText() != null && event.getText().toString().contains("1")) { 
        //Swipe left 
        path.moveTo(rightSizeOfScreen, middleYValue); 
        path.lineTo(leftSideOfScreen, middleYValue); 
       } else { 
        //Swipe right 
        path.moveTo(leftSideOfScreen, middleYValue); 
        path.lineTo(rightSizeOfScreen, middleYValue); 
       } 

       gestureBuilder.addStroke(new GestureDescription.StrokeDescription(path, 100, 50)); 
       dispatchGesture(gestureBuilder.build(), new GestureResultCallback() { 
        @Override 
        public void onCompleted(GestureDescription gestureDescription) { 
         Log.w("Gesture Completed"); 
         super.onCompleted(gestureDescription); 
        } 
       }, null); 
      } 

     default: { 
      break; 
     } 
    } 
} 

重要なので、私は、単一のタッチを行うことができ、私の設定xmlファイルをチェックアウト

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" 
android:description="@string/accessibility_service_description" 
android:accessibilityEventTypes="typeAllMask" 
android:accessibilityFlags="flagReportViewIds" 
android:canRetrieveWindowContent="true" 
android:canRequestTouchExplorationMode="true" 
android:accessibilityFeedbackType="feedbackSpoken" 
android:notificationTimeout="100" 
android:settingsActivity="com.moba11y.basicaccessibilityservice.SettingsActivity" 
android:canPerformGestures="true" 
/> 
+0

ありがとう私はそれを試してみます –

+0

うん、その作業<3 ありがとう:) –

0

、タッチ、デバイス上で私のサービスを有効にしたとき、それは、このサービスは、スワイプを実行できると言うので、それが可能である知っている:

android:canPerformGestures="true" 

パスを正しく設定してください:

p.moveTo(position.x, position.y); 
p.lineTo(position.x + 300, position.y); 

これはアンドロイド24以上でのみ動作します。

関連する問題