{"id":28600,"date":"2024-11-25T11:52:47","date_gmt":"2024-11-25T03:52:47","guid":{"rendered":"https:\/\/fwq.ai\/blog\/28600\/"},"modified":"2024-11-25T11:52:47","modified_gmt":"2024-11-25T03:52:47","slug":"%e5%88%86%e4%ba%ab%e4%b8%80%e4%b8%aaandroid%e5%ae%9e%e7%8e%b0%e5%be%ae%e4%bf%a1%e8%87%aa%e5%8a%a8%e6%8a%a2%e7%ba%a2%e5%8c%85%e7%9a%84%e4%bb%a3%e7%a0%81%e5%ae%9e%e4%be%8b","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/28600\/","title":{"rendered":"\u5206\u4eab\u4e00\u4e2aAndroid\u5b9e\u73b0\u5fae\u4fe1\u81ea\u52a8\u62a2\u7ea2\u5305\u7684\u4ee3\u7801\u5b9e\u4f8b"},"content":{"rendered":"<p>\u7b80\u5355\u5b9e\u73b0\u4e86\u5fae\u4fe1\u81ea\u52a8\u62a2\u7ea2\u5305\u7684\u670d\u52a1\uff0c\u539f\u7406\u5c31\u662f\u6839\u636e\u5173\u952e\u5b57\u627e\u5230\u76f8\u5e94\u7684view, \u7136\u540e\u81ea\u52a8\u70b9\u51fb\u3002\u4e3b\u8981\u662f\u7528\u5230accessibilityservice\u8fd9\u4e2a\u8f85\u52a9\u670d\u52a1\uff0c\u57fa\u672c\u53ef\u4ee5\u6ee1\u8db3\u81ea\u52a8\u62a2\u7ea2\u5305\u7684\u529f\u80fd\uff0c\u4f46\u662f\u6709\u4e9b\u903b\u8f91\u9700\u8981\u4f18\u5316\uff0c\u6bd4\u5982\uff0c\u62c6\u5b8c\u4e00\u4e2a\u7ea2\u5305\u540e\uff0c\u5fc5\u987b\u624b\u52a8\u70b9\u51fb\u8fd4\u56de\u952e\uff0c\u624d\u80fd\u8fdb\u884c\u4e0b\u4e00\u6b21\u81ea\u52a8\u62a2\u7ea2\u5305\u3002<\/p>\n<pre>AndroidManifest.xml\r\n&nbsp;&nbsp;&nbsp;\r\n&lt;?xml  version=\"1.0\" encoding=\"utf-8\"?&gt;&lt;manifest&gt;\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;application&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;activity&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;intent-filter&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;action&gt;&lt;\/action&gt;\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;category&gt;&lt;\/category&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/intent-filter&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/activity&gt;\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;service&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;intent-filter&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;action&gt;&lt;\/action&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/intent-filter&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;meta-data&gt;&lt;\/meta-data&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/service&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/application&gt;\r\n&nbsp;\r\n&lt;\/manifest&gt;\r\n&nbsp;&nbsp;&nbsp;\r\nenvelope_service_config.xml\r\n&nbsp;&nbsp;&nbsp;\r\n&lt;?xml  version=\"1.0\" encoding=\"utf-8\"?&gt;&lt;accessibility-service&gt;&lt;\/accessibility-service&gt;\r\n&nbsp;&nbsp;&nbsp;\r\nactivity_main.xml\r\n&nbsp;&nbsp;&nbsp;\r\n&lt;relativelayout&gt;\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;button&gt;&lt;\/button&gt;\r\n&nbsp;\r\n&lt;\/relativelayout&gt;\r\n&nbsp;&nbsp;&nbsp;\r\nMainActivity.java\r\n&nbsp;&nbsp;&nbsp;\r\npackage&nbsp;com.jackie.webchatenvelope;&nbsp;\r\n&nbsp;&nbsp;&nbsp;\r\nimport&nbsp;android.app.Activity;&nbsp;\r\nimport&nbsp;android.content.Intent;&nbsp;\r\nimport&nbsp;android.os.Bundle;&nbsp;\r\nimport&nbsp;android.view.Menu;&nbsp;\r\nimport&nbsp;android.view.MenuItem;&nbsp;\r\nimport&nbsp;android.view.View;&nbsp;\r\nimport&nbsp;android.widget.Button;&nbsp;\r\nimport&nbsp;android.widget.Toast;&nbsp;\r\n&nbsp;&nbsp;&nbsp;\r\npublic&nbsp;class&nbsp;MainActivity&nbsp;extends&nbsp;Activity&nbsp;{&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Button&nbsp;startBtn;&nbsp;\r\n&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;@Override&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;void&nbsp;onCreate(Bundle&nbsp;savedInstanceState)&nbsp;{&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.onCreate(savedInstanceState);&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setContentView(R.layout.activity_main);&nbsp;\r\n&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;startBtn&nbsp;=&nbsp;(Button)&nbsp;findViewById(R.id.start);&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;startBtn.setOnClickListener(new&nbsp;View.OnClickListener()&nbsp;{&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onClick(View&nbsp;v)&nbsp;{&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u6253\u5f00\u7cfb\u7edf\u8bbe\u7f6e\u4e2d\u8f85\u52a9\u529f\u80fd&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Intent&nbsp;intent&nbsp;=&nbsp;new&nbsp;Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS);&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;startActivity(intent);&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Toast.makeText(MainActivity.this,&nbsp;\"\u627e\u5230\u62a2\u7ea2\u5305\uff0c\u7136\u540e\u5f00\u542f\u670d\u52a1\u5373\u53ef\",&nbsp;Toast.LENGTH_LONG).show();&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;\r\n&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;@Override&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;boolean&nbsp;onCreateOptionsMenu(Menu&nbsp;menu)&nbsp;{&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;Inflate&nbsp;the&nbsp;menu;&nbsp;this&nbsp;adds&nbsp;items&nbsp;to&nbsp;the&nbsp;action&nbsp;bar&nbsp;if&nbsp;it&nbsp;is&nbsp;present.&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getMenuInflater().inflate(R.menu.menu_main,&nbsp;menu);&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;\r\n&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;@Override&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;boolean&nbsp;onOptionsItemSelected(MenuItem&nbsp;item)&nbsp;{&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;Handle&nbsp;action&nbsp;bar&nbsp;item&nbsp;clicks&nbsp;here.&nbsp;The&nbsp;action&nbsp;bar&nbsp;will&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;automatically&nbsp;handle&nbsp;clicks&nbsp;on&nbsp;the&nbsp;Home\/Up&nbsp;button,&nbsp;so&nbsp;long&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;as&nbsp;you&nbsp;specify&nbsp;a&nbsp;parent&nbsp;activity&nbsp;in&nbsp;AndroidManifest.xml.&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;id&nbsp;=&nbsp;item.getItemId();&nbsp;\r\n&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/noinspection&nbsp;SimplifiableIfStatement&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(id&nbsp;==&nbsp;R.id.action_settings)&nbsp;{&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;\r\n&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;super.onOptionsItemSelected(item);&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;\r\n}\r\n&nbsp;&nbsp;&nbsp;\r\nEnvelopeService.java\r\n&nbsp;&nbsp;&nbsp;\r\npackage&nbsp;com.jackie.webchatenvelope;\r\n&nbsp;\r\nimport&nbsp;android.accessibilityservice.AccessibilityService;\r\nimport&nbsp;android.annotation.TargetApi;\r\nimport&nbsp;android.app.Notification;\r\nimport&nbsp;android.app.PendingIntent;\r\nimport&nbsp;android.os.Build;\r\nimport&nbsp;android.os.Handler;\r\nimport&nbsp;android.util.Log;\r\nimport&nbsp;android.view.accessibility.AccessibilityEvent;\r\nimport&nbsp;android.view.accessibility.AccessibilityManager;\r\nimport&nbsp;android.view.accessibility.AccessibilityNodeInfo;\r\nimport&nbsp;android.widget.Toast;\r\n&nbsp;\r\nimport&nbsp;java.util.List;\r\n&nbsp;\r\n\/**\r\n&nbsp;*&nbsp;&lt;p&gt;Created&nbsp;by&nbsp;Administrator&lt;\/p&gt;\r\n&nbsp;*&nbsp;&lt;p&gt;&lt;\/p&gt;\r\n&nbsp;*&nbsp;\u62a2\u7ea2\u5305\u5916\u6302\u670d\u52a1\r\n&nbsp;*\/\r\npublic&nbsp;class&nbsp;EnvelopeService&nbsp;extends&nbsp;AccessibilityService&nbsp;{\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;final&nbsp;String&nbsp;TAG&nbsp;=&nbsp;\"Jackie\";\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/**\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;\u5fae\u4fe1\u7684\u5305\u540d\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/\r\n&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;final&nbsp;String&nbsp;WECHAT_PACKAGENAME&nbsp;=&nbsp;\"com.tencent.mm\";\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/**\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;\u7ea2\u5305\u6d88\u606f\u7684\u5173\u952e\u5b57\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/\r\n&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;final&nbsp;String&nbsp;ENVELOPE_TEXT_KEY&nbsp;=&nbsp;\"[\u5fae\u4fe1\u7ea2\u5305]\";\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;Handler&nbsp;handler&nbsp;=&nbsp;new&nbsp;Handler();\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;@Override\r\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onAccessibilityEvent(AccessibilityEvent&nbsp;event)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;int&nbsp;eventType&nbsp;=&nbsp;event.getEventType();\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.d(TAG,&nbsp;\"\u4e8b\u4ef6----&amp;gt;\"&nbsp;+&nbsp;event);\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u901a\u77e5\u680f\u4e8b\u4ef6\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(eventType&nbsp;==&nbsp;AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;charsequence&gt;&nbsp;texts&nbsp;=&nbsp;event.getText();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!texts.isEmpty())&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(CharSequence&nbsp;t&nbsp;:&nbsp;texts)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;text&nbsp;=&nbsp;String.valueOf(t);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(text.contains(ENVELOPE_TEXT_KEY))&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;openNotification(event);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(eventType&nbsp;==&nbsp;AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;openEnvelope(event);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/*@Override\r\n&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;boolean&nbsp;onKeyEvent(KeyEvent&nbsp;event)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/return&nbsp;super.onKeyEvent(event);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;\r\n&nbsp;&nbsp;&nbsp;&nbsp;}*\/\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;@Override\r\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onInterrupt()&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Toast.makeText(this,&nbsp;\"\u4e2d\u65ad\u62a2\u7ea2\u5305\u670d\u52a1\",&nbsp;Toast.LENGTH_SHORT).show();\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;@Override\r\n&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;void&nbsp;onServiceConnected()&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.onServiceConnected();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Toast.makeText(this,&nbsp;\"\u8fde\u63a5\u62a2\u7ea2\u5305\u670d\u52a1\",&nbsp;Toast.LENGTH_SHORT).show();\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;sendNotificationEvent()&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AccessibilityManager&nbsp;manager&nbsp;=&nbsp;(AccessibilityManager)&nbsp;getSystemService(ACCESSIBILITY_SERVICE);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!manager.isEnabled())&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AccessibilityEvent&nbsp;event&nbsp;=&nbsp;AccessibilityEvent.obtain(AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.setPackageName(WECHAT_PACKAGENAME);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.setClassName(Notification.class.getName());\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CharSequence&nbsp;tickerText&nbsp;=&nbsp;ENVELOPE_TEXT_KEY;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.getText().add(tickerText);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;manager.sendAccessibilityEvent(event);\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;\/**\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;\u6253\u5f00\u901a\u77e5\u680f\u6d88\u606f\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/\r\n&nbsp;&nbsp;&nbsp;&nbsp;@TargetApi(Build.VERSION_CODES.JELLY_BEAN)\r\n&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;openNotification(AccessibilityEvent&nbsp;event)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(event.getParcelableData()&nbsp;==&nbsp;null&nbsp;||&nbsp;!(event.getParcelableData()&nbsp;instanceof&nbsp;Notification))&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u4ee5\u4e0b\u662f\u7cbe\u534e\uff0c\u5c06\u5fae\u4fe1\u7684\u901a\u77e5\u680f\u6d88\u606f\u6253\u5f00\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Notification&nbsp;notification&nbsp;=&nbsp;(Notification)&nbsp;event.getParcelableData();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PendingIntent&nbsp;pendingIntent&nbsp;=&nbsp;notification.contentIntent;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pendingIntent.send();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(PendingIntent.CanceledException&nbsp;e)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;@TargetApi(Build.VERSION_CODES.JELLY_BEAN)\r\n&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;openEnvelope(AccessibilityEvent&nbsp;event)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(\"com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI\".equals(event.getClassName()))&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u70b9\u4e2d\u4e86\u7ea2\u5305\uff0c\u4e0b\u4e00\u6b65\u5c31\u662f\u53bb\u62c6\u7ea2\u5305\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checkKey1();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(\"com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI\".equals(event.getClassName()))&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u62c6\u5b8c\u7ea2\u5305\u540e\u770b\u8be6\u7ec6\u7684\u7eaa\u5f55\u754c\u9762\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/nonething\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(\"com.tencent.mm.ui.LauncherUI\".equals(event.getClassName()))&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5728\u804a\u5929\u754c\u9762,\u53bb\u70b9\u4e2d\u7ea2\u5305\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checkKey2();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;@TargetApi(Build.VERSION_CODES.JELLY_BEAN)\r\n&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;checkKey1()&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AccessibilityNodeInfo&nbsp;nodeInfo&nbsp;=&nbsp;getRootInActiveWindow();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(nodeInfo&nbsp;==&nbsp;null)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.w(TAG,&nbsp;\"rootWindow\u4e3a\u7a7a\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;accessibilitynodeinfo&gt;&nbsp;list&nbsp;=&nbsp;nodeInfo.findAccessibilityNodeInfosByText(\"\u62c6\u7ea2\u5305\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(AccessibilityNodeInfo&nbsp;n&nbsp;:&nbsp;list)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n.performAction(AccessibilityNodeInfo.ACTION_CLICK);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;@TargetApi(Build.VERSION_CODES.JELLY_BEAN)\r\n&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;checkKey2()&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AccessibilityNodeInfo&nbsp;nodeInfo&nbsp;=&nbsp;getRootInActiveWindow();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(nodeInfo&nbsp;==&nbsp;null)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.w(TAG,&nbsp;\"rootWindow\u4e3a\u7a7a\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;accessibilitynodeinfo&gt;&nbsp;list&nbsp;=&nbsp;nodeInfo.findAccessibilityNodeInfosByText(\"\u9886\u53d6\u7ea2\u5305\");\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(list.isEmpty())&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list&nbsp;=&nbsp;nodeInfo.findAccessibilityNodeInfosByText(ENVELOPE_TEXT_KEY);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(AccessibilityNodeInfo&nbsp;n&nbsp;:&nbsp;list)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.i(TAG,&nbsp;\"--&amp;gt;\u5fae\u4fe1\u7ea2\u5305:\"&nbsp;+&nbsp;n);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n.performAction(AccessibilityNodeInfo.ACTION_CLICK);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u6700\u65b0\u7684\u7ea2\u5305\u9886\u8d77\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;list.size()&nbsp;-&nbsp;1;&nbsp;i&nbsp;&amp;gt;=&nbsp;0;&nbsp;i--)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AccessibilityNodeInfo&nbsp;parent&nbsp;=&nbsp;list.get(i).getParent();\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Log.i(TAG,&nbsp;\"--&amp;gt;\u9886\u53d6\u7ea2\u5305:\"&nbsp;+&nbsp;parent);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(parent&nbsp;!=&nbsp;null)&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent.performAction(AccessibilityNodeInfo.ACTION_CLICK);\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;}\r\n}&lt;\/accessibilitynodeinfo&gt;&lt;\/accessibilitynodeinfo&gt;&lt;\/charsequence&gt;<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<p>\u4ee5\u4e0a\u5c31\u662f\u5206\u4eab\u4e00\u4e2aAndroid\u5b9e\u73b0\u5fae\u4fe1\u81ea\u52a8\u62a2\u7ea2\u5305\u7684\u4ee3\u7801\u5b9e\u4f8b\u7684\u8be6\u7ec6\u5185\u5bb9\uff0c\u66f4\u591a\u8bf7\u5173\u6ce8\u7c73\u4e91\u5176\u5b83\u76f8\u5173\u6587\u7ae0\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u7b80\u5355\u5b9e\u73b0\u4e86\u5fae\u4fe1\u81ea\u52a8\u62a2\u7ea2\u5305\u7684\u670d\u52a1\uff0c\u539f\u7406\u5c31\u662f\u6839\u636e\u5173\u952e\u5b57\u627e\u5230\u76f8\u5e94\u7684view, \u7136\u540e\u81ea\u52a8\u70b9\u51fb\u3002\u4e3b\u8981\u662f\u7528\u5230accessibilityservice\u8fd9\u4e2a\u8f85\u52a9\u670d\u52a1\uff0c\u57fa\u672c\u53ef\u4ee5\u6ee1\u8db3\u81ea\u52a8\u62a2\u7ea2\u5305\u7684\u529f\u80fd\uff0c\u4f46\u662f\u6709\u4e9b\u903b\u8f91\u9700\u8981\u4f18\u5316\uff0c\u6bd4\u5982\uff0c\u62c6\u5b8c\u4e00\u4e2a\u7ea2\u5305\u540e\uff0c\u5fc5\u987b\u624b\u52a8\u70b9\u51fb\u8fd4\u56de\u952e\uff0c\u624d\u80fd\u8fdb\u884c\u4e0b\u4e00\u6b21\u81ea\u52a8\u62a2\u7ea2\u5305\u3002 AndroidManifest.xml &nbsp;&nbsp;&nbsp; &lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?&gt;&lt;manifest&gt; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&lt;application&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;activity&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;intent-filter&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;action&gt;&lt;\/action&gt; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;category&gt;&lt;\/category&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/intent-filter&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/activity&gt; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;service&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;intent-filter&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;action&gt;&lt;\/action&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/intent-filter&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;meta-data&gt;&lt;\/meta-data&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/service&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;\/application&gt; &nbsp; &lt;\/manifest&gt; &nbsp;&nbsp;&nbsp; envelope_service_config.xml &nbsp;&nbsp;&nbsp; &lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?&gt;&lt;accessibility-service&gt;&lt;\/accessibility-service&gt; &nbsp;&nbsp;&nbsp; activity_main.xml &nbsp;&nbsp;&nbsp; &lt;relativelayout&gt; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&lt;button&gt;&lt;\/button&gt; &nbsp; &lt;\/relativelayout&gt; &nbsp;&nbsp;&nbsp; MainActivity.java &nbsp;&nbsp;&nbsp; package&nbsp;com.jackie.webchatenvelope;&nbsp; &nbsp;&nbsp;&nbsp; import&nbsp;android.app.Activity;&nbsp; import&nbsp;android.content.Intent;&nbsp; import&nbsp;android.os.Bundle;&nbsp; import&nbsp;android.view.Menu;&nbsp; import&nbsp;android.view.MenuItem;&nbsp; import&nbsp;android.view.View;&nbsp; import&nbsp;android.widget.Button;&nbsp; import&nbsp;android.widget.Toast;&nbsp; &nbsp;&nbsp;&nbsp; public&nbsp;class&nbsp;MainActivity&nbsp;extends&nbsp;Activity&nbsp;{&nbsp; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[],"class_list":["post-28600","post","type-post","status-publish","format-standard","hentry","category-19"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/28600","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/comments?post=28600"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/28600\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=28600"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=28600"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=28600"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}