Просмотр исходного кода

1.添加应用更新完自动安装功能

王鹏鹏 2 лет назад
Родитель
Сommit
fb89e48afc

+ 14 - 0
app/src/main/AndroidManifest.xml

@@ -65,6 +65,20 @@
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
+
+        <service
+            android:name="com.yingyangfly.AutoInstallService"
+            android:enabled="true"
+            android:exported="true"
+            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/auto_install_services_config" />
+        </service>
     </application>
 
 </manifest>

+ 68 - 0
app/src/main/java/com/yingyangfly/AutoInstallService.java

@@ -0,0 +1,68 @@
+package com.yingyangfly;
+
+import android.accessibilityservice.AccessibilityService;
+import android.util.Log;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
+
+import java.util.List;
+
+/**
+ * Created by _SOLID
+ * Date:2016/7/20
+ * Time:17:43
+ */
+public class AutoInstallService extends AccessibilityService {
+
+    @Override
+    public void onAccessibilityEvent(AccessibilityEvent event) {
+        findAndPerformActionButton("继续");
+        findAndPerformActionButton("更新");
+        findAndPerformActionTextView("下一步");
+        findAndPerformActionTextView("安装");
+        findAndPerformActionTextView("确定");
+        findAndPerformActionTextView("更新");
+    }
+
+
+    private void findAndPerformActionButton(String text) {
+        if (getRootInActiveWindow() == null)//取得当前激活窗体的根节点
+            return;
+        //通过文字找到当前的节点
+        List<AccessibilityNodeInfo> nodes = getRootInActiveWindow().findAccessibilityNodeInfosByText(text);
+        for (int i = 0; i < nodes.size(); i++) {
+            AccessibilityNodeInfo node = nodes.get(i);
+            // 执行按钮点击行为
+            if (node.getClassName().equals("android.widget.Button") && node.isEnabled()) {
+                node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
+            }
+        }
+    }
+
+    private void findAndPerformActionTextView(String text) {
+        if (getRootInActiveWindow() == null)
+            return;
+        //通过文字找到当前的节点
+        List<AccessibilityNodeInfo> nodes = getRootInActiveWindow().findAccessibilityNodeInfosByText(text);
+        for (int i = 0; i < nodes.size(); i++) {
+            AccessibilityNodeInfo node = nodes.get(i);
+            // 执行按钮点击行为
+            if (node.getClassName().equals("android.widget.TextView") && node.isEnabled()) {
+                node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
+            }
+        }
+    }
+
+    @Override
+    protected void onServiceConnected() {
+        super.onServiceConnected();
+        Log.e("wpp", "onServiceConnected");
+    }
+
+    @Override
+    public void onInterrupt() {
+        Log.e("wpp", "onInterrupt");
+    }
+
+
+}

+ 3 - 2
app/src/main/res/values/strings.xml

@@ -1,3 +1,4 @@
-<resources>
-
+<resources xmlns:tools="http://schemas.android.com/tools">
+    <string name="accessibility_service_descriptions" tools:ignore="ResourceName" translatable="false">应用自动安装服务</string>
+    <string name="auto_install_accessibility_description" tools:ignore="MissingTranslation">手机app自动安装服务</string>
 </resources>

+ 11 - 0
app/src/main/res/xml/auto_install_services_config.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:accessibilityEventTypes="typeAllMask"
+    android:accessibilityFeedbackType="feedbackAudible"
+    android:accessibilityFlags=""
+    android:canRetrieveWindowContent="true"
+    android:description="@string/auto_install_accessibility_description"
+    android:notificationTimeout="100"
+    android:packageNames="com.android.packageinstaller"
+    tools:ignore="ResourceName" />

+ 0 - 13
home/src/main/AndroidManifest.xml

@@ -31,19 +31,6 @@
                 android:name="android.support.FILE_PROVIDER_PATHS"
                 android:resource="@xml/app_updater_paths" />
         </provider>
-
-        <service
-            android:name="com.yingyangfly.home.updater.InstallAccessibilityService"
-            android:enabled="true"
-            android:exported="true"
-            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/accessibility_service_config" />
-        </service>
     </application>
 
 </manifest>

+ 68 - 0
home/src/main/java/com/yingyangfly/home/updater/AutoInstallService.java

@@ -0,0 +1,68 @@
+package com.yingyangfly.home.updater;
+
+import android.accessibilityservice.AccessibilityService;
+import android.util.Log;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
+
+import java.util.List;
+
+/**
+ * Created by _SOLID
+ * Date:2016/7/20
+ * Time:17:43
+ */
+public class AutoInstallService extends AccessibilityService {
+
+    @Override
+    public void onAccessibilityEvent(AccessibilityEvent event) {
+        findAndPerformActionButton("继续");
+        findAndPerformActionButton("更新");
+        findAndPerformActionTextView("下一步");
+        findAndPerformActionTextView("安装");
+        findAndPerformActionTextView("确定");
+        findAndPerformActionTextView("更新");
+    }
+
+
+    private void findAndPerformActionButton(String text) {
+        if (getRootInActiveWindow() == null)//取得当前激活窗体的根节点
+            return;
+        //通过文字找到当前的节点
+        List<AccessibilityNodeInfo> nodes = getRootInActiveWindow().findAccessibilityNodeInfosByText(text);
+        for (int i = 0; i < nodes.size(); i++) {
+            AccessibilityNodeInfo node = nodes.get(i);
+            // 执行按钮点击行为
+            if (node.getClassName().equals("android.widget.Button") && node.isEnabled()) {
+                node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
+            }
+        }
+    }
+
+    private void findAndPerformActionTextView(String text) {
+        if (getRootInActiveWindow() == null)
+            return;
+        //通过文字找到当前的节点
+        List<AccessibilityNodeInfo> nodes = getRootInActiveWindow().findAccessibilityNodeInfosByText(text);
+        for (int i = 0; i < nodes.size(); i++) {
+            AccessibilityNodeInfo node = nodes.get(i);
+            // 执行按钮点击行为
+            if (node.getClassName().equals("android.widget.TextView") && node.isEnabled()) {
+                node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
+            }
+        }
+    }
+
+    @Override
+    protected void onServiceConnected() {
+        super.onServiceConnected();
+        Log.e("wpp", "onServiceConnected");
+    }
+
+    @Override
+    public void onInterrupt() {
+        Log.e("wpp", "onInterrupt");
+    }
+
+
+}

+ 0 - 13
home/src/main/manifest/AndroidManifest.xml

@@ -30,19 +30,6 @@
                 android:name="android.support.FILE_PROVIDER_PATHS"
                 android:resource="@xml/app_updater_paths"/>
         </provider>
-
-        <service
-            android:name="com.yingyangfly.home.updater.InstallAccessibilityService"
-            android:enabled="true"
-            android:exported="true"
-            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/accessibility_service_config" />
-        </service>
     </application>
 
 </manifest>

+ 1 - 0
home/src/main/res/values/strings.xml

@@ -36,4 +36,5 @@
     <string name="upgrade_reminder" tools:ignore="ResourceName">小豚提醒您升级更好用的新版本,快来更新吧</string>
     <string name="upgrade_now" tools:ignore="ResourceName">立即升级</string>
     <string name="accessibility_service_descriptions" tools:ignore="ResourceName">应用自动安装服务</string>
+    <string name="auto_install_accessibility_description" tools:ignore="ResourceName">手机app自动安装服务</string>
 </resources>

+ 11 - 0
home/src/main/res/xml/auto_install_services_config.xml

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:accessibilityEventTypes="typeAllMask"
+    android:accessibilityFeedbackType="feedbackAudible"
+    android:accessibilityFlags=""
+    android:canRetrieveWindowContent="true"
+    android:description="@string/auto_install_accessibility_description"
+    android:notificationTimeout="100"
+    android:packageNames="com.android.packageinstaller"
+    tools:ignore="ResourceName" />