亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android微信搶紅包功能的實現(xiàn)原理淺析

 更新時間:2017年01月09日 16:25:36   作者:一杯清泉  
快到新年了,微信紅包越來越多,那么基于程序是怎么實現(xiàn)的呢?今天小編給大家分享Android微信搶紅包功能的實現(xiàn)原理淺析,一起看看吧

快到過農(nóng)歷年了,微信紅包也越來越多了,出現(xiàn)了好多紅包外掛程序,就很好奇如何實現(xiàn)的,于是自己研究了一番,親自寫了個微信搶紅包的APP?,F(xiàn)在就一步一步來實現(xiàn)它。

實現(xiàn)思路

微信搶紅包程序開啟時候,他就可以隨時識別、捕獲紅包,服務(wù)可以實現(xiàn)正在功能,當我們開啟服務(wù)的時候,服務(wù)就不停的在后臺運行,不停地輪詢著微信里面的消息,當發(fā)現(xiàn)紅包時候就立即打開微信紅包所在的界面。但是他怎識別紅包呢?需要找到微信搶紅包里面節(jié)點的view,當找到對應(yīng)的view,在獲取view的關(guān)鍵字或者id,根據(jù)關(guān)鍵字或者id,自動的模擬點擊,拆開紅包。這里有一個AccessibilityService的服務(wù),他是一個輔助類,可以實現(xiàn)這些功能。

AccessibilityService輔助類

AccessibilityService是一個輔助類,可以監(jiān)聽我們手機的焦點,窗口變化,按鈕點擊,聲音提示等等,但是必須手動開啟,不能通過代碼開啟,存在于設(shè)置里面的輔助功能,開啟他我們可以增強互動性。現(xiàn)在來來使用他實現(xiàn)搶紅包功能:

1、新建一個類QiangHongBaoService繼承自AccessibilityService

@Override 
public void onAccessibilityEvent(AccessibilityEvent event) { 
  //獲取事件類型 
  int type = event.getEventType(); 
  //在這里進行事件過濾 
   
} 

2、注冊清單文件

<service 
  android:name=".QiangHongBaoService" 
  android:label="@string/app_name" 
  android:enabled="true" 
  android:exported="true" 
  android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"> 
  <intent-filter android:priority="1000"> 
    <action android:name="android.accessibilityservice.AccessibilityService"/> 
  </intent-filter> 
  <meta-data 
    android:name="android.accessibilityservice" 
    android:resource="@xml/envelope_service_config"/> 
</service> 

新建一個xml文件夾,創(chuàng)建envelope_service_config文件

<?xml version="1.0" encoding="utf-8"?> 
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" 
            android:accessibilityEventTypes="typeNotificationStateChanged|typeWindowStateChanged" 
            android:accessibilityFeedbackType="feedbackGeneric" 
            android:accessibilityFlags="flagDefault" 
            android:canRetrieveWindowContent="true" 
            android:description="@string/accessibility_description"            android:notificationTimeout="100"           android:packageNames="com.tencent.mm" /> 
記得加上網(wǎng)絡(luò)權(quán)限:<uses-permission Android:name="android.permission.VIBRATE" />

搶紅包業(yè)務(wù)邏輯處理

在微信搶紅包界面上只關(guān)心兩個事件類型:

1、AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED//監(jiān)聽通知欄消息

在監(jiān)聽通知欄消息界面主要是監(jiān)聽每次微信發(fā)過來的消息顯示在通知欄時,獲取消息,當發(fā)現(xiàn)獲取的消息含有“微信紅包”時就會立即打開 紅包所顯示的界面。

/** 
 * 從知消息欄打開微信聊天界面 
 * @param event 
 */ 
private void openNotification(AccessibilityEvent event) { 
  if (event.getParcelableData() != null && event.getParcelableData() instanceof Notification) { 
    Notification notification = (Notification) event.getParcelableData(); 
    PendingIntent pendingIntent = notification.contentIntent; 
    try { 
      pendingIntent.send(); 
    } catch (PendingIntent.CanceledException e) { 
      e.printStackTrace(); 
    } 
  } 
} 

2、AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED//當前窗口變化,是否進入微信聊天界面

在這里需要根據(jù)包名判斷是否是聊天界面,如果是則點中紅包,如果不是判斷是否是拆紅包界面,如果是則拆開,執(zhí)行拆紅包動作。

聊天界面的包名:com.tencent.mm.ui.LauncherUI

拆紅包界面的包名:com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI

/** 
 * 點中紅包 
 */ 
@TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
private void clickHongBao() { 
  AccessibilityNodeInfo nodeInfo = getRootInActiveWindow(); 
  if (nodeInfo == null) { 
    return; 
  } 
  List<AccessibilityNodeInfo> list = nodeInfo.findAccessibilityNodeInfosByText(ENVLOP_OPEN_KEY); 
  if (list.isEmpty()) { 
    list = nodeInfo.findAccessibilityNodeInfosByText(ENVELOPE_TEXT_KEY); 
    for (AccessibilityNodeInfo n : list) { 
      n.performAction(AccessibilityNodeInfo.ACTION_CLICK); 
      break; 
    } 
  } else { 
    //最新的紅包領(lǐng)起 
    for (int i = list.size() - 1; i >= 0; i--) { 
      AccessibilityNodeInfo parent = list.get(i).getParent(); 
      if (parent != null) { 
        parent.performAction(AccessibilityNodeInfo.ACTION_CLICK); 
        break; 
      } 
    } 
  } 
} 
/** 
 *拆紅包 
 */ 
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) 
private void openHongBao() { 
  AccessibilityNodeInfo rootInActiveWindow = getRootInActiveWindow(); 
  if (rootInActiveWindow == null) { 
    return; 
  } 
  List<AccessibilityNodeInfo> nodeInfos = rootInActiveWindow.findAccessibilityNodeInfosByViewId(ENVLOP_CHECKED_KEY); 
  for (AccessibilityNodeInfo nodeInfo : nodeInfos) { 
    nodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK); 
  } 
} 

上例中的拆紅包是依據(jù)控件的id拆開的,也可以按照關(guān)鍵字“拆紅包”執(zhí)行。但是效率略低于根據(jù)id拆紅包,這樣很可能影響搶紅包的效率,需要注意的是拆紅包的id在微信不同版本中是不一樣的,所以需要經(jīng)常改變,比較麻煩。此外當AccessibilityService服務(wù)被關(guān)閉時會回調(diào)onInterrupt方法,當連接上時會回調(diào)onServiceConnected方法,在這里可以做一些提示性的工作。

搶紅包功能的開啟

微信搶紅包功能是通過手動開啟的,直接在設(shè)置里面找到輔助功能,點擊開啟,為了方便,給activity設(shè)置一個按鈕,采用隱式意圖的方式,直接跳轉(zhuǎn)至服務(wù)功能。

//打開系統(tǒng)設(shè)置中輔助功能 
Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS); 
startActivity(intent); 

到了這里微信搶紅包的而核心功能介紹完了,搶紅包的效率還受網(wǎng)絡(luò),手機內(nèi)存大小,系統(tǒng)流暢度的影響,以及服務(wù)優(yōu)先級等等因素的影響。這里只是學(xué)習(xí)一下,千萬別用來經(jīng)常外掛來搶紅包,小心被封號哦?。?!
源碼已經(jīng)上傳至github,需要的點擊打開鏈接

https://github.com/yoonerloop/WebEnvelope

以上所述是小編給大家介紹的Android微信搶紅包功能的實現(xiàn)原理淺析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Android中捕獲TTextView文本中的鏈接點擊事件方法

    Android中捕獲TTextView文本中的鏈接點擊事件方法

    這篇文章主要介紹了Android中捕獲TTextView文本中的鏈接點擊事件方法,本文給出了實現(xiàn)代碼和使用方法以及實現(xiàn)自己控制的方法,需要的朋友可以參考下
    2015-01-01
  • Android動態(tài)添加碎片代碼實例

    Android動態(tài)添加碎片代碼實例

    這篇文章主要介紹了Android動態(tài)添加碎片代碼實例,
    2019-06-06
  • Android入門之使用OKHttp多線程下載文件

    Android入門之使用OKHttp多線程下載文件

    OkHttp是一個神器。OkHttp分為異步、同步兩種調(diào)用。今天我們就會基于OkHttp的異步調(diào)用實現(xiàn)一個多線程并行下載文件并以進度條展示總進度的實用例子,需要的可以參考一下
    2023-01-01
  • Android手機號注冊、綁定手機號獲取短信驗證碼實例

    Android手機號注冊、綁定手機號獲取短信驗證碼實例

    這篇文章主要為大家詳細介紹了Android手機號注冊、綁定手機號獲取短信驗證碼實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Android?flutter?Dio鎖的巧妙實現(xiàn)方法示例

    Android?flutter?Dio鎖的巧妙實現(xiàn)方法示例

    這篇文章主要為大家介紹了Android?flutter?Dio鎖的巧妙實現(xiàn)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Android 仿微信發(fā)動態(tài)九宮格拖拽、刪除功能

    Android 仿微信發(fā)動態(tài)九宮格拖拽、刪除功能

    這篇文章主要介紹了Android 仿微信發(fā)動態(tài)九宮格拖拽、刪除功能,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • Android屏幕分辨率工具類使用詳解

    Android屏幕分辨率工具類使用詳解

    這篇文章主要為大家詳細介紹了Android屏幕分辨率工具類使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • flutter直接上傳文件到阿里云oss

    flutter直接上傳文件到阿里云oss

    上傳視頻到oss,之前是走后端上傳到oss,會有一個問題就是我要先上傳給后端,后端再上傳給oss就會導(dǎo)致上傳多次,消耗時間過長影響用戶體驗,所以我參考文檔寫了直接上傳到阿里云oss獲取到文件訪問路徑。
    2021-05-05
  • Android動畫工具類的封裝實戰(zhàn)記錄

    Android動畫工具類的封裝實戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于一次Android動畫工具類的封裝實戰(zhàn),文中通過示例代碼介紹的非常詳細,對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Android編程開發(fā)錄音和播放錄音簡單示例

    Android編程開發(fā)錄音和播放錄音簡單示例

    這篇文章主要介紹了Android編程開發(fā)錄音和播放錄音的方法,結(jié)合實例形式分析了Android多媒體開發(fā)中音頻操作的相關(guān)技巧,需要的朋友可以參考下
    2016-08-08

最新評論