From 7f292c4158e1854ca6dc72895c829e538cbc6c7b Mon Sep 17 00:00:00 2001 From: Runt <qingingrunt2010@qq.com> Date: Wed, 04 May 2022 15:21:57 +0000 Subject: [PATCH] 发送歌词功能 --- app/src/main/java/com/auto/lyric/MainActivity.java | 5 - app/src/main/java/com/auto/lyric/service/FloatingWindowService.java | 66 +++++++++++---------- app/src/main/java/com/auto/lyric/service/AutoInputService.java | 58 ++++++++++++------- 3 files changed, 73 insertions(+), 56 deletions(-) diff --git a/app/src/main/java/com/auto/lyric/MainActivity.java b/app/src/main/java/com/auto/lyric/MainActivity.java index 121b6f9..e0ac153 100644 --- a/app/src/main/java/com/auto/lyric/MainActivity.java +++ b/app/src/main/java/com/auto/lyric/MainActivity.java @@ -26,9 +26,6 @@ @Override public void initViews() { - - Intent inputService = new Intent(getApplicationContext(), AutoInputService.class); - Intent floatService = new Intent(getApplicationContext(), FloatingWindowService.class); binding.button.setOnClickListener(v -> { @@ -75,7 +72,9 @@ startActivity(intent); }else{//开启监听服务 startService(floatService); + startService(new Intent(this,AutoInputService.class)); } + //startService(floatService); } }); } diff --git a/app/src/main/java/com/auto/lyric/service/AutoInputService.java b/app/src/main/java/com/auto/lyric/service/AutoInputService.java index 73c3ea9..e5bb979 100644 --- a/app/src/main/java/com/auto/lyric/service/AutoInputService.java +++ b/app/src/main/java/com/auto/lyric/service/AutoInputService.java @@ -43,15 +43,19 @@ } break; case ACTION_PASTE: - List<AccessibilityNodeInfo> list = getRootInActiveWindow().findAccessibilityNodeInfosByText("说点什么..."); - Log.e(TAG, "ACTION_PASTE nodeInfos: " + list.size()); - printView(getRootInActiveWindow()," "); - AccessibilityNodeInfo editNode = getView(getRootInActiveWindow(),"android.widget.EditText"); - if(editNode != null){ - Log.e(TAG, "ACTION_PASTE nodeInfos: " + editNode.getClassName()); - editNode.performAction(AccessibilityNodeInfo.ACTION_PASTE); - }else{ - Toast.makeText(getBaseContext(),"未找到控件",Toast.LENGTH_SHORT).show(); + try{ + List<AccessibilityNodeInfo> list = getRootInActiveWindow().findAccessibilityNodeInfosByText("说点什么..."); + Log.e(TAG, "ACTION_PASTE nodeInfos: " + list.size()); + printView(getRootInActiveWindow()," "); + AccessibilityNodeInfo editNode = getView(getRootInActiveWindow(),"android.widget.EditText"); + if(editNode != null){ + Log.e(TAG, "ACTION_PASTE nodeInfos: " + editNode.getClassName()); + editNode.performAction(AccessibilityNodeInfo.ACTION_PASTE); + }else{ + Toast.makeText(getBaseContext(),"未找到控件",Toast.LENGTH_SHORT).show(); + } + }catch (Exception e){ + e.printStackTrace(); } break; @@ -77,23 +81,14 @@ switch (eventType) { case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED://界面变化事件 Log.e(TAG, "TYPE_WINDOW_CONTENT_CHANGED " ); + if(event.getClassName().toString().equals("androidx.viewpager.widget.ViewPager")){ + clickEdit(); + } break; case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED://界面变化事件 Log.e(TAG, "TYPE_WINDOW_STATE_CHANGED " ); if(source != null && event.getClassName().toString().equals("com.ss.android.ugc.aweme.live.LivePlayActivity")){ - List<AccessibilityNodeInfo> list = getRootInActiveWindow().findAccessibilityNodeInfosByText("说点什么..."); - Log.e(TAG,"获取到控件 "+list.size()); - if (list != null && list.size() > 0 && flag) { - //模拟第三方点击事件 - //找到你的节点以后 就直接点击他就行了 - //AccessibilityNodeInfo node = list.get(0); - list.get(0).performAction(AccessibilityNodeInfo.ACTION_CLICK); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - Log.e(TAG,"执行点击 "+list.get(0).getPaneTitle()); - } - }else if(flag){ - Toast.makeText(getBaseContext(),"未找到控件",Toast.LENGTH_SHORT).show(); - } + clickEdit(); } if(event.getText().contains("更多选项") ){ @@ -128,6 +123,25 @@ } + /** + * 点击弹出 edit弹框 + */ + private void clickEdit(){ + List<AccessibilityNodeInfo> list = getRootInActiveWindow().findAccessibilityNodeInfosByText("说点什么..."); + Log.e(TAG,"获取到控件 "+list.size()); + if (list != null && list.size() > 0 && flag) { + //模拟第三方点击事件 + //找到你的节点以后 就直接点击他就行了 + //AccessibilityNodeInfo node = list.get(0); + list.get(0).performAction(AccessibilityNodeInfo.ACTION_CLICK); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + Log.e(TAG,"执行点击 "+list.get(0).getPaneTitle()); + } + }else if(flag){ + Toast.makeText(getBaseContext(),"未找到控件",Toast.LENGTH_SHORT).show(); + } + } + @SuppressLint("NewApi") private void printView(AccessibilityNodeInfo node, String space){ Log.e(TAG,space +node+" id:"+node.getViewIdResourceName() +" class:"+node.getClassName()+" text:"+node.getText()+" "+node.getPaneTitle()); diff --git a/app/src/main/java/com/auto/lyric/service/FloatingWindowService.java b/app/src/main/java/com/auto/lyric/service/FloatingWindowService.java index 92d3ce3..122af61 100644 --- a/app/src/main/java/com/auto/lyric/service/FloatingWindowService.java +++ b/app/src/main/java/com/auto/lyric/service/FloatingWindowService.java @@ -43,12 +43,12 @@ private WindowManager.LayoutParams params; FloatViewBinding binding; final String TAG = "FloatingWindowService"; - final int THREAD_STOP = 0, THREAD_START = 1 , KEYBOARD_SEND = 100,UPDATE_TIME = 200; + final int THREAD_STOP = 0, KEYBOARD_SEND = 100,UPDATE_TIME = 200; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); SimpleDateFormat msFormat = new SimpleDateFormat("mm:ss.SSS"); - boolean pause; - int progress; - + boolean pause;//是否暂停 + int progress;//时间进度 + LyricObject lyricObject;//当前发送过的歌词 Handler handler; Timer timer; @@ -60,6 +60,13 @@ binding.lyric.setOffsetY(220 - index * (binding.lyric.getSIZEWORD() + 44)); binding.lyric.invalidate(); handler.sendEmptyMessage(UPDATE_TIME); + if(lyricObject == null || lyricObject != LyricServer.getLrc_map().get(index)){ + lyricObject = LyricServer.getLrc_map().get(index); + Message message = new Message(); + message.what = KEYBOARD_SEND; + message.obj = lyricObject.lrc; + handler.sendMessage(message); + } if(index == LyricServer.getLrc_map().size()-1){ handler.sendEmptyMessage(THREAD_STOP); } @@ -90,6 +97,8 @@ stopService(new Intent(this,this.getClass())); stopService(new Intent(this,AutoInputService.class)); }); + progress = LyricServer.getLrc_map().get(0).begintime; + binding.timer.setText(msFormat.format(progress)); binding.floating.setOnTouchListener(new View.OnTouchListener() { int startY; @Override @@ -113,17 +122,9 @@ @Override public void onClick(View view) { if(pause){ - pause = false; - binding.btnPause.setText("暂停"); - binding.btnBack.setEnabled(true); - binding.btnFast.setEnabled(true); start(); }else{ - pause = true; - binding.btnPause.setText("继续"); - binding.btnBack.setEnabled(false); - binding.btnFast.setEnabled(false); - timer.cancel(); + pause(); } } }); @@ -139,17 +140,11 @@ e.printStackTrace(); } if(binding.btnStart.getText().equals("开启")){ - progress = 0 ; start(); - startService(new Intent(this,AutoInputService.class)); }else{ + pause(); binding.btnStart.setText("开启"); - binding.btnBack.setEnabled(false); - binding.btnFast.setEnabled(false); binding.btnPause.setEnabled(false); - progress = 0 ; - timer.cancel(); - stopService(new Intent(this,AutoInputService.class)); } }); initHandler(); @@ -166,13 +161,8 @@ @Override public void handleMessage(@NonNull Message msg) { super.handleMessage(msg); - if(msg.what == THREAD_START){//开始 - AutoInputService.flag = true; - binding.btnPause.performClick(); - }else if(msg.what == THREAD_STOP){//停止 - AutoInputService.flag = false; + if(msg.what == THREAD_STOP){//停止 binding.btnStart.performClick(); - }else if(msg.what == KEYBOARD_SEND){//发送文本 copy(msg.obj.toString()); Intent intent = new Intent(); @@ -213,13 +203,13 @@ case MotionEvent.ACTION_UP: if(binding.btnStart.getText().equals("开启") || pause) { int index = binding.lyric.getIndexFromOffsetY(binding.lyric.getOffsetY()); - LyricObject object = LyricServer.getLrc_map().get(index); - Log.e("LyricView", "index:"+index+" object:" + object); - if(object != null) { + LyricObject lyricObject = LyricServer.getLrc_map().get(index); + Log.e("LyricView", "index:"+index+" object:" + lyricObject); + if(lyricObject != null) { binding.lyric.setIndex(index); binding.lyric.setOffsetY(220 - index * (binding.lyric.getSIZEWORD() + 44)); - Log.e("LyricView", "object:" + object); - progress = object.begintime; + Log.e("LyricView", "object:" + lyricObject); + progress = lyricObject.begintime; binding.timer.setText(msFormat.format(progress)); } binding.lyric.invalidate(); @@ -238,6 +228,7 @@ super.onDestroy(); Log.e(TAG,"onDestroy "); timer.cancel(); + AutoInputService.flag = false; manager.removeView(binding.getRoot()); } @@ -245,6 +236,10 @@ * 开始 */ private void start(){ + AutoInputService.flag = true; + try { + timer.cancel(); + }catch (Exception e){} timer = new Timer(); task = new ServiceTask(); timer.schedule(task,0,10); @@ -253,8 +248,17 @@ binding.btnBack.setEnabled(true); binding.btnFast.setEnabled(true); binding.btnPause.setEnabled(true); + pause = false; } + private void pause(){ + timer.cancel(); + pause = true; + AutoInputService.flag = false; + binding.btnBack.setEnabled(false); + binding.btnFast.setEnabled(false); + binding.btnPause.setText("继续"); + } //复制 -- Gitblit v1.9.1