自动刷抖音极速版得红包金币(APP实现)

   上回我们用python实现了自动刷抖音的功能(https://blog.csdn.net/u012539700/article/details/100058939),这回我们用android app的形式来实现自动刷抖音,这样就可以不用连接电脑啦。

  原理很简单,使用android无障碍里面的AccessibilityService就可以啦。

   首先在res目录下新建一个xml文件夹,然后命名一个simulatekey.xml文件,填入以下内容:

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeAllMask"
    android:accessibilityFeedbackType="feedbackGeneric"
    android:accessibilityFlags="flagReportViewIds|flagRetrieveInteractiveWindows"
    android:canRetrieveWindowContent="true"
    android:description="@string/simulate_key_description"
    android:notificationTimeout="100"
    />

其中description就是会显示在你去无障碍里面开启服务的地方的提示文字。

清单文件里面增加配置:

  <service
            android:name=".simulatekey.SimulateKeyService"
            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/simulatekey" />
        </service>

接下来是判断无障碍服务是否开启:

  public static boolean isAccessibilitySettingsOn(Context mContext) {
        int accessibilityEnabled = 0;
        final String service = mContext.getPackageName() + "/" + SimulateKeyService.class.getCanonicalName();
        try {
            accessibilityEnabled = Settings.Secure.getInt(
                    mContext.getApplicationContext().getContentResolver(),
                    android.provider.Settings.Secure.ACCESSIBILITY_ENABLED);
            Log.v(TAG, "accessibilityEnabled = " + accessibilityEnabled);
        } catch (Settings.SettingNotFoundException e) {
            Log.e(TAG, "Error finding setting, default accessibility to not found: "
                    + e.getMessage());
        }
        TextUtils.SimpleStringSplitter mStringColonSplitter = new TextUtils.SimpleStringSplitter(':');

        if (accessibilityEnabled == 1) {
            Log.v(TAG, "***ACCESSIBILITY IS ENABLED*** -----------------");
            String settingValue = Settings.Secure.getString(
                    mContext.getApplicationContext().getContentResolver(),
                    Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);
            if (settingValue != null) {
                mStringColonSplitter.setString(settingValue);
                while (mStringColonSplitter.hasNext()) {
                    String accessibilityService = mStringColonSplitter.next();

                    Log.v(TAG, "-------------- > accessibilityService :: " + accessibilityService + " " + service);
                    if (accessibilityService.equalsIgnoreCase(service)) {
                        Log.v(TAG, "We've found the correct setting - accessibility is switched on!");
                        return true;
                    }
                }
            }
        } else {
            Log.v(TAG, "***ACCESSIBILITY IS DISABLED***");
        }

        return false;
    }

  如果没有开启的话,我们就判断去开启这个服务:

   if(!SimulateKeyService.isAccessibilitySettingsOn(MainActivity.this)){
                    Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
                    startActivity(intent);
                }else{
                    startService(new Intent(MainActivity.this, SimulateKeyService.class));
                }

最后我们写一个SimulateKeyService服务继承AccessibilityService的onAccessibilityEvent方法:

 @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        Log.d("awqtj",event.toString()+" ===== "+event.getPackageName());
        if(event==null ||event.getPackageName()==null){
            return;
        }

        if(event.getPackageName().equals("com.ss.android.ugc.aweme.lite")){

            final AccessibilityNodeInfo nodeInfo = event.getSource();
            if (nodeInfo != null &&  "android.support.v4.view.ViewPager".equals(nodeInfo.getClassName())){
                if(!isFirst){
                    return;
                }
                if(isFirst){
                    isFirst = false;
                }
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            while(true){
                                Log.d("awqtj","================start "+nodeInfo.getClassName());

                                Random random = new Random();
                                int delay = random.nextInt(1000);
                                Thread.sleep(1000+delay);
                                {
                                    nodeInfo.performAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
                                }
                                Log.d("awqtj","================end ");
                            }
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }).start();
            }else {
                Log.d("awqtj","node info null");
            }

        }
    }

然后,首次进入抖音的时候,你滑动一下,就会检测到抖音里面的viewpager这个控件,然后就可以实现不断自动刷抖音得金币啦,而且设置自动刷的时间是随机的,应该可以避免被系统检测到自动刷的机制。

  • 16
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
首先,你需要有一个具备语音识别功能的设备,例如树莓派,然后将其连接到你要控制的电脑或手机上。 接下来,你需要安装一个串口通信程序,例如minicom或putty,在Linux系统上使用串口连接到你的设备。 然后,你需要编写一个Python脚本,使用串口通信来与你的设备进行通信,并将语音识别结果发送给电脑或手机上的抖音客户端。 具体实现方法可以参考以下步骤: 1. 首先,你需要安装Python的串口通信模块,例如pyserial,可以使用以下命令进行安装: ``` pip install pyserial ``` 2. 接着,你需要编写一个Python脚本,使用串口通信来与你的设备进行通信,例如: ```python import serial ser = serial.Serial('/dev/ttyUSB0', 9600) # 将串口号和波特率替换为你的设备对应的值 while True: if ser.in_waiting > 0: data = ser.readline().decode('utf-8').strip() print(data) # 输出从设备接收到的数据 ``` 这段代码将会不断地从串口接收数据,并输出到控制台中。 3. 接下来,你需要集成语音识别功能,例如使用百度语音识别API,可以使用以下命令进行安装: ``` pip install baidu-aip ``` 4. 然后,你需要编写一个函数,使用百度语音识别API来将语音转换为文本,例如: ```python from aip import AipSpeech APP_ID = 'your_app_id' API_KEY = 'your_api_key' SECRET_KEY = 'your_secret_key' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) def speech_to_text(file_path): with open(file_path, 'rb') as f: speech_data = f.read() result = client.asr(speech_data, 'pcm', 16000, {'dev_pid': 1536}) if result['err_no'] == 0: text = result['result'][0] return text else: return None ``` 这个函数将会使用百度语音识别API将指定语音文件转换为文本。 5. 最后,你需要将语音识别结果发送给电脑或手机上的抖音客户端,例如: ```python import os import time def send_to_douyin(text): os.system('adb shell input tap 540 1700') # 替换为你的手机屏幕上打开抖音的位置 time.sleep(2) os.system('adb shell input tap 540 700') # 替换为你的手机屏幕上搜索按钮的位置 time.sleep(2) os.system('adb shell input text "{}"'.format(text)) # 输入搜索内容 time.sleep(2) os.system('adb shell input tap 540 1000') # 替换为你的手机屏幕上搜索结果的位置 time.sleep(2) os.system('adb shell input tap 540 1500') # 替换为你的手机屏幕上播放按钮的位置 ``` 这段代码将会使用ADB工具来模拟手机操作,实现抖音客户端中搜索并播放指定的内容。 综上所述,你可以通过以上步骤基于Linux串口实现语音控制抖音的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

景兄弟1366

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值