8月のアップデートチャレンジに参加して24日目です。イベントの詳細については、8月のアップデートチャレンジをご覧ください。
ナゲッツアプリのオープニング画面広告をスキップする方法(2)
前回の記事では、オープンスクリーン広告をスキップしたいのは、携帯電話がボタンをクリックするのを助けてくれることだと分析し、
跳过
最終的にアクセシビリティサービスをテクノロジーとして選択しました。この記事では、広告機能をスキップするためのコードを実装します。
1.効果
プログラムによるクリックは跳过
、手動によるクリックよりもはるかに高速です。
第二に、コードの実装
2.1キーコールバック
作成されたサービス継承AccessibilityService
クラスの後、別のキーコールバックはonAccessibilityEvent
コールバックであり、ロジックはすべてこのメソッドにあります。
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
}
复制代码
2.1パッケージ名の検索
特定のアプリまたは特定のアプリの下の広告のみをスキップしたい。
2つの方法
- xml構成ファイルの
android:packageNames
属性追加します - サービスでパッケージ名を取得し、判断してください。
String packageStr = event.getPackageName().toString();
if (TextUtils.equals(packageStr, "com.xx.xxx")) {
}
复制代码
たとえば、取得したNuggetsアプリのパッケージ名は次のとおりです。com.daimajia.gold
ps:インターネットで検索したところ代码家
、githubはこの人物がナゲットのCTOであることを示しています。
2.2ターゲットコンポーネントを見つける
クリックメソッドをコンポーネントに追加する場合は、最初にコンポーネントを見つけてコンポーネントを取得してから、クリックアクションを追加する必要があります。
コンポーネントを見つける方法は?
ここで使用する方法は3つあります。
- uiautomatorは、Android SDKが付属しており、簡単に使用できます
- アプリであるautoJsもユーザー補助サービスを利用しており、ユーザー補助サービスをベースに、携帯電話で見やすいグラフィカルインターフェースを追加しています。
- コードを使用して、自分でトラバースして表示します。
詳細な分析:
Nuggetsアプリの右上隅に、ビュー構造を分析するための「スキップ」テキストがあります。これはおそらく当てはまります。
偽のコード
<FragmentLayout id:fl_skip > // 实际点击事件在这个
<ProgressBar > // 这个是跳过效果的进度
<TextView text="跳过"> // 跳过的文字载体
</FragmentLayout>
复制代码
2.3ターゲットコンポーネントを取得する
最初に現在のページのすべてのコンポーネントを取得します->次にターゲットコンポーネントを取得します
getRootInActiveWindow()
すべてのコンポーネントを取得
するために使用findAccessibilityNodeInfosByViewId(“”)
するこのIDに一致するすべてのNodeListをfindAccessibilityNodeInfosByText()
取得するために使用するこのテキストに一致するすべてのNodeListを取得するために使用する
AccessibilityNodeInfo sourceNodeInfo = getRootInActiveWindow();
if (sourceNodeInfo == null)
return;
List<AccessibilityNodeInfo> textNodeInfoList = sourceNodeInfo.findAccessibilityNodeInfosByViewId("com.daimajia.gold:id/fl_skip");
if (textNodeInfoList.size() > 0) {
textNodeInfoList.get(0).performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
复制代码
2.4クリックアクションの設定
ターゲットの位置を見つけたらAccessibilityNodeInfo
、操作を開始します。
一般的に使用される
ACTION_CLICK:ノード情報をクリックするアクション。ACTION_LONG_CLICK:ノード上のアクションをクリックして押したままにします。ACTION_COPY:現在の選択範囲をクリップボードにコピーする操作。ACTION_CUT:現在のオプションを切り取って貼り付け、クリップボードに配置します。ACTION_FOCUS:ノードに入力フォーカスを追加する操作。
効果を出すために実装AccessibilityNodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);
できます。
2.5コードセクション
他のアプリの機能を実装したい場合は、コードを拡張できます。
完全なコード。
package com.demo.accessibilitydemo;
import android.accessibilityservice.AccessibilityService;
import android.text.TextUtils;
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import java.util.List;
public class MyService extends AccessibilityService {
private final String TAG = "MyService";
public MyService() {
}
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
Log.d(TAG, "package:" + event.getPackageName());
String packageStr = event.getPackageName().toString();
if (TextUtils.equals(packageStr, "com.daimajia.gold")) {
AccessibilityNodeInfo sourceNodeInfo = getRootInActiveWindow();
if (sourceNodeInfo == null)
return;
List<AccessibilityNodeInfo> textNodeInfoList = sourceNodeInfo.findAccessibilityNodeInfosByViewId("com.daimajia.gold:id/fl_skip");
if (textNodeInfoList.size() > 0) {
textNodeInfoList.get(0).performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
}
}
@Override
public void onInterrupt() {
}
}
复制代码