溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Android開(kāi)發(fā)中怎么實(shí)現(xiàn)一個(gè)屏蔽、拉黑與刪除聯(lián)系人的功能

發(fā)布時(shí)間:2020-11-23 16:21:34 來(lái)源:億速云 閱讀:197 作者:Leah 欄目:移動(dòng)開(kāi)發(fā)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)Android開(kāi)發(fā)中怎么實(shí)現(xiàn)一個(gè)屏蔽、拉黑與刪除聯(lián)系人的功能,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

實(shí)現(xiàn)效果:

讓微信永遠(yuǎn)彈不出那個(gè)刪除的對(duì)話框不就相當(dāng)于屏蔽掉該功能了嗎?哈哈效果如圖:

Android開(kāi)發(fā)中怎么實(shí)現(xiàn)一個(gè)屏蔽、拉黑與刪除聯(lián)系人的功能

實(shí)現(xiàn)原理:

1.我們知道,其實(shí)微信每次刪除聯(lián)系人都會(huì)彈出此頁(yè)面

Android開(kāi)發(fā)中怎么實(shí)現(xiàn)一個(gè)屏蔽、拉黑與刪除聯(lián)系人的功能

2.如果你對(duì)AccessibilityService有過(guò)了解或者有看過(guò)我之前的兩篇博客,你會(huì)知道,其實(shí)每次彈出這個(gè)框,都會(huì)觸發(fā)AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED這個(gè)事件,所以我們只要在每次觸發(fā)該事件的時(shí)候進(jìn)行判斷當(dāng)前頁(yè)面是不是處于刪除聯(lián)系人對(duì)話框,如果是,我們模擬點(diǎn)擊取消按鈕。思路什么的其實(shí)都很簡(jiǎn)單,可以直接看下代碼:

package com.cxk.wechatdeletefail;

import android.accessibilityservice.AccessibilityService;
import android.content.Intent;
import android.text.TextUtils;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.Toast;

/**
 * Created by cxk on 2017/2/9.
 * 屏蔽微信"刪除聯(lián)系人"和"拉黑"功能
 */

public class DeleteFailService extends AccessibilityService {

  /**
   * 判斷是不是刪除聯(lián)系人彈框
   */
  private boolean isDeleteDialog;
  /**
   * 判斷是不是拉黑聯(lián)系人彈框
   */
  private boolean isDefriendDialog;

  @Override
  public void onAccessibilityEvent(AccessibilityEvent event) {
    int eventType = event.getEventType();
    switch (eventType) {
      //進(jìn)入聊天頁(yè)面會(huì)觸發(fā)該事件
      case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
        //獲取當(dāng)前聊天頁(yè)面根布局
        AccessibilityNodeInfo rootNode = getRootInActiveWindow();
        //屏蔽微信"刪除聯(lián)系人"和"拉黑"功能
        DeleteFail(rootNode);
        break;

    }

  }

  /**
   * 遍歷所有控件,判斷是不是刪除聯(lián)系人界面或者拉黑界面,如果是則模擬點(diǎn)擊"取消",讓它消失。
   *
   * @param rootNode
   */
  private void DeleteFail(AccessibilityNodeInfo rootNode) {
    if(rootNode!=null){
      for (int i = 0; i < rootNode.getChildCount(); i++) {
        AccessibilityNodeInfo node = rootNode.getChild(i);
        //判斷是不是刪除聯(lián)系人彈出框
        if("android.widget.TextView".equals(node.getClassName().toString())){
          if(!TextUtils.isEmpty(node.getText())){
            if(node.getText().toString().contains("將同時(shí)刪除與該聯(lián)系人的聊天記錄")){
              isDeleteDialog=true;
            }
          }
        }

        //判斷是不是拉黑聯(lián)系人彈出框
        if("android.widget.TextView".equals(node.getClassName().toString())){
          if(!TextUtils.isEmpty(node.getText())){
            if(node.getText().toString().contains("你將不再收到對(duì)方的消息,并且你們相互看不到對(duì)方朋友圈的更新")){
              isDefriendDialog=true;
            }
          }
        }

        //模擬點(diǎn)擊取消按鈕讓對(duì)話框消失
        if("android.widget.Button".equals(node.getClassName().toString())){
          if(isDeleteDialog||isDefriendDialog){
            if(!TextUtils.isEmpty(node.getText())){
              if(node.getText().toString().equals("取消")){
                node.performAction(AccessibilityNodeInfo.ACTION_CLICK);
              }
            }
          }
        }
      }
    }
  }

  /**
   * 必須重寫(xiě)的方法:系統(tǒng)要中斷此service返回的響應(yīng)時(shí)會(huì)調(diào)用。在整個(gè)生命周期會(huì)被調(diào)用多次。
   */
  @Override
  public void onInterrupt() {
    Toast.makeText(this, "我快被終結(jié)了啊-----", Toast.LENGTH_SHORT).show();
  }

  /**
   * 服務(wù)開(kāi)始連接
   */
  @Override
  protected void onServiceConnected() {
    Toast.makeText(this, "服務(wù)已開(kāi)啟", Toast.LENGTH_SHORT).show();
    super.onServiceConnected();
  }

  /**
   * 服務(wù)斷開(kāi)
   *
   * @param intent
   * @return
   */
  @Override
  public boolean onUnbind(Intent intent) {
    Toast.makeText(this, "服務(wù)已被關(guān)閉", Toast.LENGTH_SHORT).show();
    return super.onUnbind(intent);
  }
}

使用方法:

設(shè)置-輔助功能-無(wú)障礙-點(diǎn)擊WechatDeletefail開(kāi)啟即可(或者在設(shè)置中查找輔助功能等)

上述就是小編為大家分享的Android開(kāi)發(fā)中怎么實(shí)現(xiàn)一個(gè)屏蔽、拉黑與刪除聯(lián)系人的功能了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI