精华内容
下载资源
问答
  • Android 自动点击
    千次阅读
    2018-09-28 09:31:28

    最近在在看怎么样让android实现自动点击活动里面的任意位置,不通过获得控件的id来得到点击效果;
    看了很多之后发现其实要通过adb shell来实现 什么?adb shell是啥?emmmmm 自行百度吧,我们在这儿把它看为android的命令行工具;废话不说 我们开始在代码里面实现自动点击 让程序可以自动点击。两个方法 一个不需要root,一个需要
    当然 先看方法一:先创建一个AutoTouch类 代码如下:

    import android.app.Activity;
    import android.util.Log;
    import android.widget.Toast;
    
    public class AutoTouch {
       
        public void autoClickPos(final double x1, final double y1,final double x2, final double y2){
             new Thread(new Runnable() {
                @Override
                public void run() {
                    try{
                        Thread.sleep(500);
                    }catch (Exception e){
                        e.printStackTrace();
                    }
    
                    String[] order = {"input", "swipe", "" + x1, "" + y1, "" + x2, "" + y2,};
                    try{
                        new ProcessBuilder(order).start();
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    }
    

    2.再来调用

    AutoTouch autoTouch = new AutoTouch();
    autoTouch.autoClickPos(900,1800,920,1800);
    

    来看看这个

    new ProcessBuilder(order).start();
    

    这就是让adb shell执行的代码 order 是要执行的命令
    你可能会觉得不对呀 String[] order = {"input", "swipe", "" + x1, "" + y1, "" + x2, "" + y2,};
    这swipe不是滑动的意思吗?我读书少你可别骗我。不好意思,我读书也不多,不过真的没有骗你;
    真正的点击应该把swipe改为tap但是 但是 注意重点来了 但是这么用andriod没有反应 所以就只能用swipe
    至于swipe这儿还有什么参数我在此简短的列出来
    1.text 相当于输入内容;
    2.keyevent 手机物理按键和屏幕按键
    常见 input keyevent 3 表示home键
    input keyevent 4表示back键
    input keyevent 19 表示up键
    input keyevent 24 表示volume+键
    input keyevent 25 表示volume-键
    3.tap 点击事件
    input tap x y xy是点击的坐标 不过在android中tap好像失效了不知道为什么
    4.swipe 滑动事件
    input swipe x1 y1 x2 y2 x1 y1 起始坐标 x2 y2 滑动到的目标 我们在这儿就是这样来实现点击效果的。

    方法二:这个方法需要获取root权限 依旧用到的是adb shell在此就不赘述了直接上代码:

    private  void exeShellcmd(String cmd){
        try{
            Process process = Runtime.getRuntime().exec("su");
            OutputStream outputStream = process.getOutputStream();
            DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
            dataOutputStream.writeBytes(cmd);
            dataOutputStream.flush();
            dataOutputStream.close();
            outputStream.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    

    调用的时候 这样调用:

     exeShellcmd("input swipe 900 1800 920 1800");
    

    就说这么多啦,有问题可以一起交流哦

    更多相关内容
  • 安卓自动点击

    2019-04-11 13:15:44
    自动点击安卓版是一款非常好用的免root屏幕自动点击器软件,将以您选择的任何时间间隔可靠地点击或滑动您在屏幕上定位的任何位置。  自动点击器不需要root权限,并可用于全屏应用程序。  如果您需要保持游戏处于...
  • 轻易连是一款能够一键自动循环点击和一次性点击屏幕多个位置不用root的APP软件,用户可以让轻易连APP点击屏幕任何位置,能够自行设置以毫秒为单位的下一次点击...点击后会提示设置下一次自动点击的间隔时间,可以按"...

    轻易连是一款能够一键自动循环点击和一次性点击屏幕多个位置不用root的APP软件,用户可以让轻易连APP点击屏幕任何位置,能够自行设置以毫秒为单位的下一次点击时间。还可以将设置好的屏幕点击位置以名称的方式保存起来。

    71b5c0fc49b11409877cc5972a473247.gif

    轻易连的使用方法如下:

    点击启动自定义。

    71b5c0fc49b11409877cc5972a473247.gif

    启动自定义悬浮窗后,点击自定义位置。

    71b5c0fc49b11409877cc5972a473247.gif

    接下来没有提示,只需要手动点击一下要APP自动点击的屏幕位置。点击后会提示设置下一次自动点击的间隔时间,可以按"+"或者"-"号按钮控制输入框数字,单位是毫秒,只支持数字类型。以此类推设置所有要点击的位置。点击数量没有限制。

    71b5c0fc49b11409877cc5972a473247.gif

    设置好要点击的位置后,可以选择保存,下一次需要操作此流程时,可以在界面上选中对于的名称,点击启动即可。也可以直接点击"一键"或者"连点"按钮来进行马上开始操作。这两种类型的区别是,一键:一次性点击所有要点击的位置,不循环。连点:循环点击所有要点击的位置。

    如果在设置要点击的位置时,点击了错误的位置,可以点击悬浮窗的清理位置按钮来清除所有位置坐标,然后重新开始设置。

    还有悬浮窗上的小方框,可以用来隐藏悬浮窗,点一下隐藏,再点一下显示。方便其它操作。

    71b5c0fc49b11409877cc5972a473247.gif

    展开全文
  • 自动点击器帮你自动点击屏幕,无需ROOT权限。可以方便添加点击位置,设置点击速度。 类似于按键精灵功能。 只支持Android7.0及以上系统
  • 轻易连是一款能够一键自动循环点击和一次性点击屏幕多个位置不用root的APP软件,用户可以让轻易连APP点击屏幕任何位置,能够自行设置以毫秒为单位的下一次点击...点击后会提示设置下一次自动点击的间隔时间,可以按"...

    轻易连是一款能够一键自动循环点击和一次性点击屏幕多个位置不用root的APP软件,用户可以让轻易连APP点击屏幕任何位置,能够自行设置以毫秒为单位的下一次点击时间。还可以将设置好的屏幕点击位置以名称的方式保存起来。

    71b5c0fc49b11409877cc5972a473247.gif

    轻易连的使用方法如下:

    点击启动自定义。

    71b5c0fc49b11409877cc5972a473247.gif

    启动自定义悬浮窗后,点击自定义位置。

    71b5c0fc49b11409877cc5972a473247.gif

    接下来没有提示,只需要手动点击一下要APP自动点击的屏幕位置。点击后会提示设置下一次自动点击的间隔时间,可以按"+"或者"-"号按钮控制输入框数字,单位是毫秒,只支持数字类型。以此类推设置所有要点击的位置。点击数量没有限制。

    71b5c0fc49b11409877cc5972a473247.gif

    设置好要点击的位置后,可以选择保存,下一次需要操作此流程时,可以在界面上选中对于的名称,点击启动即可。也可以直接点击"一键"或者"连点"按钮来进行马上开始操作。这两种类型的区别是,一键:一次性点击所有要点击的位置,不循环。连点:循环点击所有要点击的位置。

    如果在设置要点击的位置时,点击了错误的位置,可以点击悬浮窗的清理位置按钮来清除所有位置坐标,然后重新开始设置。

    还有悬浮窗上的小方框,可以用来隐藏悬浮窗,点一下隐藏,再点一下显示。方便其它操作。

    71b5c0fc49b11409877cc5972a473247.gif

    展开全文
  • 使用Java自动化方法模拟Android人工点击、触屏事件(含platform-tools工具)
  • 鼠标自动点击器多坐标批量点击版是一款简单易用的鼠标点击软件,鼠标自动点击器_多坐标版可以设定多个屏幕坐标进行周期性的自动单击或者自动双击,具有获取坐标和自动鼠标点击的功能,可以解放你的手指,提高工作...
  • ps: 不想看代码的滑到最下面有apk包百度网盘下载...一些配置build.gradleplugins {id 'com.android.application'id 'kotlin-android'id 'kotlin-android-extensions'}android {compileSdkVersion 30buildToolsVersio...

    ps: 不想看代码的滑到最下面有apk包百度网盘下载地址

    1. 先看效果图 不然都是耍流氓

    596b615be3dab82375e7255233478a8e.gif

    2.项目目录

    325bee08b28e0cabfcb5df69cd446395.png

    3.一些配置

    build.gradle

    plugins {

    id 'com.android.application'

    id 'kotlin-android'

    id 'kotlin-android-extensions'

    }

    android {

    compileSdkVersion 30

    buildToolsVersion "30.0.3"

    defaultConfig {

    applicationId "com.znan.autoclick"

    minSdkVersion 24

    targetSdkVersion 30

    versionCode 1

    versionName "1.0"

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

    }

    buildTypes {

    release {

    minifyEnabled false

    proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

    }

    }

    compileOptions {

    sourceCompatibility JavaVersion.VERSION_1_8

    targetCompatibility JavaVersion.VERSION_1_8

    }

    kotlinOptions {

    jvmTarget = '1.8'

    }

    }

    dependencies {

    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"

    implementation 'androidx.core:core-ktx:1.3.2'

    implementation 'androidx.appcompat:appcompat:1.2.0'

    implementation 'com.google.android.material:material:1.3.0'

    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'

    testImplementation 'junit:junit:4.+'

    androidTestImplementation 'androidx.test.ext:junit:1.1.2'

    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

    //协程

    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.3"

    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.3"

    }

    accessibility.xml

    android:accessibilityEventTypes="typeAllMask"

    android:accessibilityFeedbackType="feedbackAllMask"

    android:canPerformGestures="true"

    android:canRetrieveWindowContent="true"

    android:description="@string/accessibility_desc" />

    AndroidManifest.xml 注册权限和服务

    package="com.znan.autoclick">

    android:allowBackup="true"

    android:icon="@mipmap/ic_launcher"

    android:label="@string/app_name"

    android:roundIcon="@mipmap/ic_launcher_round"

    android:supportsRtl="true"

    android:theme="@style/Theme.AutoClick">

    android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">

    android:name="android.accessibilityservice"

    android:resource="@xml/accessibility" />

    4.代码

    AutoClickService.kt 无障碍服务

    import android.accessibilityservice.AccessibilityService

    import android.accessibilityservice.GestureDescription

    import android.app.Notification

    import android.content.Intent

    import android.graphics.Path

    import android.os.Build

    import android.util.Log

    import android.view.accessibility.AccessibilityEvent

    import androidx.annotation.RequiresApi

    import androidx.core.app.NotificationCompat

    import kotlinx.coroutines.*

    class AutoClickService : AccessibilityService() {

    private val TAG = javaClass.canonicalName

    var mainScope: CoroutineScope? = null

    //点击间隔

    private var mInterval = -1L

    //点击坐标xy

    private var mPointX = -1f

    private var mPointY = -1f

    //悬浮窗视图

    private lateinit var mFloatingView: FloatingClickView

    companion object {

    val FLAG_ACTION = "flag_action"

    //打开悬浮窗

    val ACTION_SHOW = "action_show"

    //自动点击事件 开启/关闭

    val ACTION_PLAY = "action_play"

    val ACTION_STOP = "action_stop"

    //关闭悬浮窗

    val ACTION_CLOSE = "action_close"

    }

    override fun onCreate() {

    super.onCreate()

    startForegroundNotification()

    mFloatingView = FloatingClickView(this)

    }

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {

    Log.d(TAG, "onStartCommand " + intent?.extras)

    intent?.apply {

    val action = getStringExtra(FLAG_ACTION)

    Log.d(TAG, "action " + action)

    when (action) {

    ACTION_SHOW -> {

    mInterval = getLongExtra("interval", 5000)

    mFloatingView.show()

    }

    ACTION_PLAY -> {

    mPointX = getFloatExtra("pointX", 0f)

    mPointY = getFloatExtra("pointY", 0f)

    mainScope = MainScope()

    autoClickView(mPointX, mPointY)

    }

    ACTION_STOP -> {

    mainScope?.cancel()

    }

    ACTION_CLOSE -> {

    mFloatingView.remove()

    mainScope?.cancel()

    }

    else -> {

    Log.e(TAG, "action error")

    }

    }

    }

    return super.onStartCommand(intent, flags, startId)

    }

    private fun startForegroundNotification() {

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

    val notificationBuilder =

    NotificationCompat.Builder(this, NotificationConstants.CHANNEL_ID)

    val notification = notificationBuilder.setOngoing(true)

    .setSmallIcon(R.mipmap.ic_launcher)

    .setCategory(Notification.CATEGORY_SERVICE)

    .build()

    startForeground(-1, notification)

    } else {

    startForeground(-1, Notification())

    }

    }

    @RequiresApi(Build.VERSION_CODES.N)

    private fun autoClickView(x: Float, y: Float) {

    mainScope?.launch {

    while (true) {

    delay(mInterval)

    Log.d(TAG, "auto click x:$x y:$y")

    val path = Path()

    path.moveTo(x, y)

    val gestureDescription = GestureDescription.Builder()

    .addStroke(GestureDescription.StrokeDescription(path, 100L, 100L))

    .build()

    dispatchGesture(

    gestureDescription,

    object : AccessibilityService.GestureResultCallback() {

    override fun onCompleted(gestureDescription: GestureDescription?) {

    super.onCompleted(gestureDescription)

    Log.d(TAG, "自动点击完成")

    }

    override fun onCancelled(gestureDescription: GestureDescription?) {

    super.onCancelled(gestureDescription)

    Log.d(TAG, "自动点击取消")

    }

    },

    null

    )

    }

    }

    }

    override fun onInterrupt() {

    }

    override fun onAccessibilityEvent(event: AccessibilityEvent?) {

    }

    override fun onDestroy() {

    super.onDestroy()

    mainScope?.cancel()

    }

    }

    悬浮窗

    SingletonHolder.kt

    open class SingletonHolder(creator: (A) -> T) {

    private var creator: ((A) -> T)? = creator

    @Volatile private var instance: T? = null

    fun getInstance(arg: A): T {

    val i = instance

    if (i != null) {

    return i

    }

    return synchronized(this) {

    val i2 = instance

    if (i2 != null) {

    i2

    } else {

    val created = creator!!(arg)

    instance = created

    creator = null

    created

    }

    }

    }

    }

    FloatingManager.kt

    import android.content.Context

    import android.view.View

    import android.view.WindowManager

    class FloatingManager private constructor(context: Context) {

    //获得WindowManager对象

    private var mWindowManager: WindowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager

    companion object : SingletonHolder(::FloatingManager)

    /**

    * 添加悬浮窗

    * @param view

    * @param params

    * @return

    */

    fun addView(view: View, params: WindowManager.LayoutParams): Boolean {

    try {

    mWindowManager.addView(view, params)

    return true

    } catch (e: Exception) {

    e.printStackTrace()

    }

    return false

    }

    /**

    * 移除悬浮窗

    *

    * @param view

    * @return

    */

    fun removeView(view: View): Boolean {

    try {

    mWindowManager.removeView(view)

    return true

    } catch (e: Exception) {

    e.printStackTrace()

    }

    return false

    }

    /**

    * 更新悬浮窗参数

    *

    * @param view

    * @param params

    * @return

    */

    fun updateView(view: View, params: WindowManager.LayoutParams): Boolean {

    try {

    mWindowManager.updateViewLayout(view, params)

    return true

    } catch (e: Exception) {

    e.printStackTrace()

    }

    return false

    }

    }

    FloatingClickView.kt

    import android.annotation.SuppressLint

    import android.content.Context

    import android.content.Intent

    import android.graphics.PixelFormat

    import android.os.Build

    import android.view.*

    import android.widget.FrameLayout

    import androidx.appcompat.widget.AppCompatImageView

    class FloatingClickView(private val mContext: Context) : FrameLayout(mContext) {

    private lateinit var mWindowManager: FloatingManager

    private var mParams: WindowManager.LayoutParams? = null

    private lateinit var mView: View

    //按下坐标

    private var mTouchStartX = -1f

    private var mTouchStartY = -1f

    val STATE_CLICKING = "state_clicking"

    val STATE_NORMAL = "state_normal"

    private var mCurrentState = STATE_NORMAL

    private var ivIcon: AppCompatImageView? = null

    init {

    initView()

    }

    private fun initView() {

    mView = LayoutInflater.from(context).inflate(R.layout.view_floating_click, null)

    ivIcon = mView.findViewById(R.id.iv_icon)

    mWindowManager = FloatingManager.getInstance(mContext)

    initListener()

    }

    @SuppressLint("ClickableViewAccessibility")

    private fun initListener() {

    mView.setOnTouchListener { v, event ->

    when (event.action) {

    MotionEvent.ACTION_DOWN -> {

    mTouchStartX = event.rawX

    mTouchStartY = event.rawY

    }

    MotionEvent.ACTION_MOVE -> {

    mParams?.let {

    it.x += (event.rawX - mTouchStartX).toInt()

    it.y += (event.rawY - mTouchStartY).toInt()

    mWindowManager.updateView(mView, it)

    }

    mTouchStartX = event.rawX

    mTouchStartY = event.rawY

    }

    }

    false

    }

    mView.setOnClickListener {

    val location = IntArray(2)

    it.getLocationOnScreen(location)

    val intent = Intent(context, AutoClickService::class.java)

    when (mCurrentState) {

    STATE_NORMAL -> {

    mCurrentState = STATE_CLICKING

    intent.putExtra(AutoClickService.FLAG_ACTION, AutoClickService.ACTION_PLAY)

    intent.putExtra("pointX", (location[0] - 1).toFloat())

    intent.putExtra("pointY", (location[1] - 1).toFloat())

    ivIcon?.setImageResource(R.drawable.ic_auto_click_icon_green_24)

    }

    STATE_CLICKING -> {

    mCurrentState = STATE_NORMAL

    intent.putExtra(AutoClickService.FLAG_ACTION, AutoClickService.ACTION_STOP)

    ivIcon?.setImageResource(R.drawable.ic_auto_click_icon_gray_24)

    }

    }

    context.startService(intent)

    }

    }

    fun show() {

    mParams = WindowManager.LayoutParams()

    mParams?.apply {

    gravity = Gravity.CENTER

    //总是出现在应用程序窗口之上

    type = if (Build.VERSION.SDK_INT >= 26) {

    WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY

    } else {

    WindowManager.LayoutParams.TYPE_SYSTEM_ALERT

    }

    //设置图片格式,效果为背景透明

    format = PixelFormat.RGBA_8888

    flags =

    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or

    WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN or WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR or

    WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH

    width = LayoutParams.WRAP_CONTENT

    height = LayoutParams.WRAP_CONTENT

    if (mView.isAttachedToWindow) {

    mWindowManager.removeView(mView)

    }

    mWindowManager.addView(mView, this)

    }

    }

    fun remove() {

    mWindowManager.removeView(mView)

    }

    }

    页面事件

    MainActivity.kt

    import android.app.NotificationChannel

    import android.app.NotificationManager

    import android.content.Context

    import android.content.Intent

    import android.graphics.Color

    import android.os.Build

    import androidx.appcompat.app.AppCompatActivity

    import android.os.Bundle

    import android.provider.Settings

    import android.text.TextUtils

    import android.util.Log

    import android.view.inputmethod.InputMethodManager

    import android.widget.Toast

    import com.google.android.material.snackbar.Snackbar

    import kotlinx.android.synthetic.main.activity_main.*

    class MainActivity : AppCompatActivity() {

    private val TAG = javaClass::class.java.canonicalName

    override fun onCreate(savedInstanceState: Bundle?) {

    super.onCreate(savedInstanceState)

    setContentView(R.layout.activity_main)

    initNotification()

    initListener()

    }

    private fun initListener() {

    btn_accessibility.setOnClickListener {

    checkAccessibility()

    }

    btn_floating_window.setOnClickListener {

    checkFloatingWindow()

    }

    btn_show_window.setOnClickListener {

    hideKeyboard()

    if (TextUtils.isEmpty(et_interval.text.toString())) {

    Snackbar.make(et_interval, "请输入间隔", Snackbar.LENGTH_SHORT).show()

    return@setOnClickListener

    }

    showFloatingWindow()

    }

    btn_close_window.setOnClickListener {

    closeFloatWindow()

    }

    btn_test.setOnClickListener {

    Log.d(TAG, "btn_test on click")

    }

    }

    /**

    * 跳转设置开启无障碍

    */

    private fun checkAccessibility() {

    val intent = Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS)

    startActivity(intent)

    }

    /**

    * 跳转设置顶层悬浮窗

    */

    private fun checkFloatingWindow() {

    if (Build.VERSION.SDK_INT >= 23) {

    if (Settings.canDrawOverlays(this)) {

    Toast.makeText(this, "已开启", Toast.LENGTH_SHORT).show()

    } else {

    val intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION)

    startActivity(intent)

    }

    }

    }

    private fun showFloatingWindow() {

    val intent = Intent(this, AutoClickService::class.java)

    intent.apply {

    putExtra(AutoClickService.FLAG_ACTION, AutoClickService.ACTION_SHOW)

    putExtra("interval", et_interval.text.toString().toLong())

    }

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

    startForegroundService(intent)

    } else {

    startService(intent)

    }

    }

    private fun closeFloatWindow() {

    val intent = Intent(this, AutoClickService::class.java)

    intent.putExtra(AutoClickService.FLAG_ACTION, AutoClickService.ACTION_CLOSE)

    startService(intent)

    }

    private fun initNotification() {

    //注册渠道id

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

    val name = NotificationConstants.CHANNEl_NAME

    val descriptionText = NotificationConstants.CHANNEL_DES

    val importance = NotificationManager.IMPORTANCE_DEFAULT

    val channel =

    NotificationChannel(NotificationConstants.CHANNEL_ID, name, importance).apply {

    description = descriptionText

    }

    channel.enableLights(true)

    channel.lightColor = Color.GREEN

    // Register the channel with the system

    val notificationManager: NotificationManager =

    getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

    notificationManager.createNotificationChannel(channel)

    }

    }

    override fun onDestroy() {

    val intent = Intent(this, AutoClickService::class.java)

    stopService(intent)

    super.onDestroy()

    }

    //收起输入法

    fun hideKeyboard() {

    val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager

    if (imm.isActive && currentFocus != null) {

    imm.hideSoftInputFromWindow(currentFocus!!.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)

    }

    }

    }

    object NotificationConstants {

    val CHANNEL_ID = "auto_channel_id"

    val CHANNEl_NAME ="Auto Click"

    val CHANNEL_DES = "Auto Click Service"

    }

    5.布局

    xmlns:app="http://schemas.android.com/apk/res-auto"

    android:layout_width="match_parent"

    android:layout_height="match_parent">

    android:id="@+id/tv_message"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_marginStart="50dp"

    android:layout_marginTop="20dp"

    android:text="先打开无障碍权限 和 悬浮窗顶层权限\n点击位置在图标左上角xy偏移一个px\n程序将会在延迟一个间隔后开始执行"

    app:layout_constraintStart_toStartOf="parent"

    app:layout_constraintTop_toTopOf="parent" />

    android:id="@+id/btn_accessibility"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_marginStart="50dp"

    android:layout_marginTop="20dp"

    android:text="无障碍选项"

    app:layout_constraintStart_toStartOf="parent"

    app:layout_constraintTop_toBottomOf="@id/tv_message" />

    android:id="@+id/btn_floating_window"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_marginStart="20dp"

    android:text="悬浮窗选项"

    app:layout_constraintStart_toEndOf="@id/btn_accessibility"

    app:layout_constraintTop_toTopOf="@id/btn_accessibility" />

    android:id="@+id/tv_unit"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_marginEnd="50dp"

    android:text="ms"

    android:textSize="24sp"

    app:layout_constraintBottom_toBottomOf="@id/et_interval"

    app:layout_constraintEnd_toEndOf="parent"

    app:layout_constraintTop_toTopOf="@id/et_interval" />

    android:id="@+id/et_interval"

    android:layout_width="0dp"

    android:layout_height="48dp"

    android:layout_marginStart="50dp"

    android:layout_marginTop="50dp"

    android:layout_marginEnd="10dp"

    android:hint="点击的间隔(建议大于100)(毫秒)"

    android:inputType="number"

    android:textColor="#FF0000"

    android:textSize="14sp"

    app:layout_constraintEnd_toStartOf="@id/tv_unit"

    app:layout_constraintStart_toStartOf="parent"

    app:layout_constraintTop_toBottomOf="@id/btn_accessibility" />

    android:id="@+id/btn_show_window"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_marginTop="50dp"

    android:text="打开悬浮视图"

    app:layout_constraintEnd_toEndOf="parent"

    app:layout_constraintStart_toStartOf="parent"

    app:layout_constraintTop_toBottomOf="@id/et_interval" />

    android:id="@+id/btn_close_window"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_marginTop="10dp"

    android:text="关闭悬浮视图"

    app:layout_constraintEnd_toEndOf="parent"

    app:layout_constraintStart_toStartOf="parent"

    app:layout_constraintTop_toBottomOf="@id/btn_show_window" />

    android:id="@+id/btn_test"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_marginBottom="100dp"

    android:text="测试点击按钮"

    app:layout_constraintBottom_toBottomOf="parent"

    app:layout_constraintEnd_toEndOf="parent"

    app:layout_constraintStart_toStartOf="parent" />

    android:layout_width="wrap_content"

    android:layout_height="wrap_content">

    android:id="@+id/iv_icon"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:src="@drawable/ic_auto_click_icon_gray_24" />

    6.debug.apk

    提取码: va43

    到此这篇关于Android实现自动点击无障碍服务功能的文章就介绍到这了,更多相关android无障碍自动点击内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    展开全文
  • Android实现自动点击 - 无障碍服务

    千次阅读 多人点赞 2021-04-20 12:44:38
    = null companion object { val FLAG_ACTION = "flag_action" //打开悬浮窗 val ACTION_SHOW = "action_show" //自动点击事件 开启/关闭 val ACTION_PLAY = "action_play" val ACTION_STOP = "action_stop" //关闭...
  • Android手机模拟点击实现自动接听电话和免提功能
  • Android 实现自动点击屏幕的方法

    千次阅读 热门讨论 2020-09-29 14:46:06
    //新建一个实体类 import android.app.... * 自动点击屏幕 */ public class AutoTouch { public int width = 0; public int height = 0; /** * 传入在屏幕中的比例位置,坐标左上角为基准 * * @param a.
  • android 坐标自动点击脚本

    千次阅读 2021-01-20 19:38:07
    :start adb shell sendevent /dev/input/event1 3 57 0 adb shell sendevent /dev/input/event1 3 53 704 adb shell sendevent /dev/input/event1 3 54 115 adb shell sendevent /dev/input/event1 0 0 0 ...
  • 自动点击安卓低配版

    千次阅读 2021-05-27 08:54:08
    自动点击安卓低配版是一款专为安卓平台开发的自动点击工具,在自动点击安卓低配版中你可以设置好点击来设置点击功能哦,包括常见的自动点击和游戏点击等等,需要点击的用户快来西西自动点击安卓低配版专区下载...
  • Android中实现按钮自动点击

    千次阅读 2020-02-18 19:00:22
    Android项目中,有时候是利用按钮来更新消息,但是想要自动更新就需要设置按钮自动点击,前面声明和关联按钮控件就不说了 代码如下: button1.performClick(); 也算写项目中的一个小笔记。 ...
  • 自动点击器(模拟点击)

    千次阅读 2021-05-27 10:18:04
    应用介绍自动点击器(模拟点击)是一款点击小工具应用,免费的且操作很便利,内里全部的成倍功能,全体都是免费的,内里又有详尽的操作说明,提倡运用之前好好的阅读,有需要的下载使用。应用说明自动点击器APP是一款...
  • Android自动点击屏幕

    万次阅读 多人点赞 2017-10-20 14:12:52
    在开发的过程中会遇到自动测试功能,比如如何自动点击按钮进行测试,当然可以使用按键精灵等工具进行测试,不过如何在程序进程中测试呢,下面就介绍下adb shell的操作,通过shell进行点击等操作。1.模拟滑动input ...
  • 安卓自动点击器免费版是一款安卓手机多功能点击器工具,拥有多种自动点击操作,可以帮助用户随时添加各种软件和游戏的脚本,进行自动点击操作,适合多款安卓手机下载使用,拥有新手使用教程可以了解,使用前需要进行...
  • 自动点击器 使用android studio辅助功能制作的自动答题器应用程序在可拖动的浮动窗口上按下“开始”按钮后,该应用程序将代表用户在浮动窗口的当前位置“点击”屏幕
  • 实现自动后台测试模拟android 按键.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 在使用过鼠大侠,自动连点器等一众手机自动点击软件之后,发现目前最好用的就是auto.js和easyclick,auto.js最新版现在是收费的,easyclick是免费的,并且提供云控,可以实现多机管理 2、auto.js使用方法 官网:...
  • Android Button自动触发点击事件

    千次阅读 2019-02-18 01:07:05
    Android Button自动触发点击事件 https://blog.csdn.net/haozidao/article/details/51789662
  • 在项目中要在展示展示的文字中,自动匹配url 并且点击实现跳转,看了很多第三方的感觉都很复杂。后来自己写了一个简单的。 实现代码如下 1、创建一个继承UITextView的CjTextView 。 import @interface ...
  • 现在很多单位上下班采用手机打卡签到,此实例能做到自动签到功能。要求android4.2以上,并且有root.
  • 各位前辈好,我想为webview设置一个可以确定坐标的点击事件。但是 1.webview接收不到OnClickListener的监听回调,目前不知道为什么。希望大佬解答一下 2.如果我使用webview的performclick(),但点击的应该是0...
  • TLP自动点击

    2017-05-08 14:01:25
    TLP自动点击
  • 自动点击模拟器app

    2021-05-27 10:17:20
    自动点击模拟器app是一款简单实用的自动点击模拟器、挂机抢票得奖励安卓版,支持自动点击,自定义设置动作时间,次数等,还有运行设置,语音播报,字幕风格选择等,需要的可以下载自动点击模拟器app使用!...
  • 事件的发生是在监听器下进行,android系统可以响应按键事件和触摸屏事件,事件说明如下:常用实现OnClickListener,OnTouchListener,OnFocusChangeListener,OnKeyListener1.onClick(View v)一个普通的点击按钮事件2....
  • 主要为大家详细介绍了Android实现自动截图脚本,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 214,699
精华内容 85,879
关键字:

安卓自动点击

友情链接: 254788.rar