精华内容
下载资源
问答
  • 方法一:安卓手机通用截屏方法手机保持在任意需要截屏的页面,这里以手机桌面为例同时按下电源键和音量键,即可轻松完成手机截屏方法二:任务栏截屏手机保持在任意需要截屏的页面,这里以手机桌面为例从手机最上方往...

    Ready

    品牌型号:华为P40

    系统:EMUI10.1.0

    不论是在游戏中还是和好友聊天中,都会有需要截屏的时候,那么安卓手机怎么截屏呢?

    方法一:安卓手机通用截屏方法

    手机保持在任意需要截屏的页面,这里以手机桌面为例

    同时按下电源键和音量键,即可轻松完成手机截屏

    2d7286efa314de029da059ac122aacde.png

    88f24dc166606a28c9cc5aa16d4d2665.png

    方法二:任务栏截屏

    手机保持在任意需要截屏的页面,这里以手机桌面为例

    从手机最上方往下划,在上方图标处再往下划动屏幕,点击截屏即可

    d7f97e43f8c8e739e1befd913765f66a.png

    c5959cb1965d6e386baa7e087d16ece0.png

    830af4607a8b96c0a5da40bc341ecab5.png

    方法三:指关节全屏截屏

    手机保持在任意需要截屏的页面,这里以手机桌面为例

    使用指关节,快速敲击屏幕两下,即可截屏当前界面

    0a95a230367164827134feb5456cdc82.png

    6adab1cd47a586c09120f49366fc4329.png

    方法四:指关节局部截屏

    手机保持在任意需要截屏的页面,这里以手机桌面为例

    使用指关节,敲击屏幕一下,然后用指关节在屏幕圈出一部分,点击右上角的保存即可

    470c8574f30a9ec6075932e47fd59f3f.png

    bd38e68cce40515cf3828aed431d65b6.png

    b1369ebd01db66e8119e26699736fe9e.png

    db3ada1cb15b01fb4ebd4fb5296b8e44.png

    方法五:隔空手势截屏

    手机保持在任意需要截屏的页面,这里以手机桌面为例

    手掌距离手机20到40厘米距离,掌心正对手机屏幕,保持一段时间直到手机上方出现手掌图标,手掌握拳即可截屏成功

    a5a6807232238a0cbd56b873a813c1fc.png

    c9b81afab215d4f4e51060968f76ace9.png

    需要注意的是,安卓手机通用截屏与任务栏截屏,所有华为手机都支持,而其他的截屏方式并非每台华为手机都能支持,自己的华为手机能够支持几种截图方式,可自行尝试。

    展开全文
  • Android手机截屏

    2015-07-17 19:36:00
    刚开始打算做一个简单的截屏程序时,以为很轻松就能搞定。  在Activity上放一个按钮,点击完成截屏操作,并将数据以图片形式保存在手机中。  动手之前,自然是看书和网上各种查资料。结果发现了解的知识越多,就...

     

      刚开始打算做一个简单的截屏程序时,以为很轻松就能搞定。

      在Activity上放一个按钮,点击完成截屏操作,并将数据以图片形式保存在手机中。

      动手之前,自然是看书和网上各种查资料。结果发现了解的知识越多,就越发感觉不对劲。

      截屏,总以为其类似于其他小应用的开发,有现成的接口或者只需要稍微改动就能达到预期的效果。

      一般讲解Android的书籍并没有提到截屏的内容,网上的文章很多,但也没有哪篇文章能真正完整地把解决思路和具体实现说清楚的。

      总结的比较合理的一篇文章为Android截屏学习经历

      直白点说,就是在Windows平台下,不root,不签名,不......,就很难做到将手机整个屏幕截取下来(包括状态栏)

      1、先介绍一下将应用程序本身的界面截取下来的方法,比较简单,不过对于手机屏幕上的其他信息就不会发挥任何作用了。如状态栏或者其他应用的界面。

    1 View viewScreen = getWindow().getDecorView();
    2 viewScreen.setDrawingCacheEnabled(true);
    3 viewScreen.buildDrawingCache();
    4 Bitmap bitmap = Bitmap.createBitmap(viewScreen.getDrawingCache(),0,0,windowWidth,windowHeight);
    5 viewScreen.destroyDrawingCache();
    6 imgScreen.setImageBitmap(bitmap);

      其中,viewScreen.getDrawingCache()方法获取屏幕信息,通过ImageView对象imgScreen显示出来,效果如下:

               

      可以看出,截取的部分只是为当前应用的界面,状态栏信息无法获取。中间的图案为imgView的初始显示内容,为手机桌面。

      顺便提一下,桌面获取与ImageView视图显示为:

    1 imgScreen.setImageDrawable(getWallpaper());

      这其实从调用方法也可以知道,getWindow().getDecorView()是针对当前视图(View)的,并不是针对手机整个屏幕的。

      2、接下来看一段比较有诱惑性的代码,出自这里

     1 public void screenShot() throws InterruptedException
     2 {
     3     Process sh;
     4     try
     5     {
     6         sh = Runtime.getRuntime().exec("su", null, null);
     7         OutputStream os = sh.getOutputStream();
     8         os.write(("/system/bin/screencap -p " + "/sdcard/Image.png").getBytes("ASCII"));
     9         os.flush();
    10         os.close();
    11         sh.waitFor();
    12     }
    13     catch (IOException e)
    14     {
    15         // TODO Auto-generated catch block
    16         e.printStackTrace();
    17     }
    18 
    19 }

      个人没有在Linux下进行测试,如果哪位朋友有这方面的开发经验,还望分享与指点。

      但从代码来看,如果没有其他约束(如手机权限、应用签名等)的话,是多么简单明了。

      3、旧版本的Android API其实是有关于截屏的接口,只不过被Google隐藏了,所以还是不能轻易使用。

      资料中也提到不少API中的截屏函数:screenshot()。

      4、而在新版本中,Google在Examples中给出了一个样例:ScreenCapture工程,环境为Android Studio。

      本人的API版本为22,工程路径为“Android\sdk\samples\android-22\media\ScreenCapture”。

      找到时确实激动一番,马上导入、运行,应用界面成功出现了,点击 开始按钮,效果如下:

          

      结果又很有趣,出现了一直截取的现象。很眼熟,在前后墙都装上镜子就会出现同样的场景了。

      样例的实现是点击START就开始不断截屏,点击STOP就停止。

      到手机文件管理中去找了一通,没发现有任何新的图片保存下来,起初以为Google只是没有做将屏幕数据保存为图片这一步。

      去看源码之前还是抱有希望的,想着自己可以马上实现从data-->image的这一步。

      5、程序中用到了Fragment,FragmentActivity。

      将截取下来的屏幕信息显示在Fragment对象中,而该对象又作为主视图的一部分,及上图中的上半部分为主Activity视图,下半部分为Fragment部分。

      主Activity中做的事情就是打开继承自Fragment类ScreenCaptureFragment的事务:

     1 @Override
     2 protected void onCreate(Bundle savedInstanceState) {
     3      super.onCreate(savedInstanceState);
     4      setContentView(R.layout.activity_main);
     5      if (savedInstanceState == null) {
     6          FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
     7          ScreenCaptureFragment fragment = new ScreenCaptureFragment(); 8          transaction.replace(R.id.sample_content_fragment, fragment);  
     9          transaction.commit();
    10         }
    11     }

      关键类ScreenCaptureFragment的实现代码为:

      1 package com.example.android.screencapture;
      2 
      3 import android.annotation.TargetApi;
      4 import android.app.Activity;
      5 import android.content.Context;
      6 import android.content.Intent;
      7 import android.hardware.display.DisplayManager;
      8 import android.hardware.display.VirtualDisplay;
      9 import android.media.Image;
     10 import android.media.ImageReader;
     11 import android.media.projection.MediaProjection;
     12 import android.media.projection.MediaProjectionManager;
     13 import android.os.Build;
     14 import android.os.Bundle;
     15 import android.support.annotation.Nullable;
     16 import android.support.v4.app.Fragment;
     17 import android.util.DisplayMetrics;
     18 import android.util.Log;
     19 import android.view.LayoutInflater;
     20 import android.view.Surface;
     21 import android.view.SurfaceHolder;
     22 import android.view.SurfaceView;
     23 import android.view.View;
     24 import android.view.ViewGroup;
     25 import android.widget.Button;
     26 import android.widget.Toast;
     27 import java.io.IOException;
     28 
     29 public class ScreenCaptureFragment extends Fragment implements View.OnClickListener {
     30 
     31     private static final String TAG = "ScreenCaptureFragment";
     32 
     33     private static final String STATE_RESULT_CODE = "result_code";
     34     private static final String STATE_RESULT_DATA = "result_data";
     35 
     36     private static final int REQUEST_MEDIA_PROJECTION = 1;
     37 
     38     private int mScreenDensity;
     39 
     40     private int mResultCode;
     41     private Intent mResultData;
     42 
     43     private Surface mSurface;
     44     private MediaProjection mMediaProjection;
     45     private VirtualDisplay mVirtualDisplay;
     46     private MediaProjectionManager mMediaProjectionManager;
     47     private Button mButtonToggle;
     48     private SurfaceView mSurfaceView;
     49 
     50     @Override
     51     public void onCreate(Bundle savedInstanceState) {
     52         super.onCreate(savedInstanceState);
     53         if (savedInstanceState != null) {
     54             mResultCode = savedInstanceState.getInt(STATE_RESULT_CODE);
     55             mResultData = savedInstanceState.getParcelable(STATE_RESULT_DATA);
     56         }
     57     }
     58 
     59     @Nullable
     60     @Override
     61     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
     62         return inflater.inflate(R.layout.fragment_screen_capture, container, false);
     63     }
     64 
     65     @Override
     66     public void onViewCreated(View view, Bundle savedInstanceState) {
     67         mSurfaceView = (SurfaceView) view.findViewById(R.id.surface);
     68         mSurface = mSurfaceView.getHolder().getSurface();
     69         mButtonToggle = (Button) view.findViewById(R.id.toggle);
     70         mButtonToggle.setOnClickListener(this);
     71     }
     72 
     73     @Override
     74     public void onActivityCreated(Bundle savedInstanceState) {
     75         super.onActivityCreated(savedInstanceState);
     76         Activity activity = getActivity();
     77         DisplayMetrics metrics = new DisplayMetrics();
     78         activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
     79         mScreenDensity = metrics.densityDpi;
     80         mMediaProjectionManager = (MediaProjectionManager)
     81                 activity.getSystemService(Context.MEDIA_PROJECTION_SERVICE);
     82     }
     83 
     84     @Override
     85     public void onSaveInstanceState(Bundle outState) {
     86         super.onSaveInstanceState(outState);
     87         if (mResultData != null) {
     88             outState.putInt(STATE_RESULT_CODE, mResultCode);
     89             outState.putParcelable(STATE_RESULT_DATA, mResultData);
     90         }
     91     }
     92 
     93     @Override
     94     public void onClick(View v) {
     95         switch (v.getId()) {
     96             case R.id.toggle:
     97                 if (mVirtualDisplay == null) {
     98                     try {
     99                         startScreenCapture();
    100                     } catch (IOException e) {
    101                         e.printStackTrace();
    102                     }
    103                 } else {
    104                     stopScreenCapture();
    105                 }
    106                 break;
    107         }
    108     }
    109 
    110     @Override
    111     public void onActivityResult(int requestCode, int resultCode, Intent data) {
    112         if (requestCode == REQUEST_MEDIA_PROJECTION) {
    113             if (resultCode != Activity.RESULT_OK) {
    114                 Toast.makeText(getActivity(), R.string.user_cancelled, Toast.LENGTH_SHORT).show();
    115                 return;
    116             }
    117             Activity activity = getActivity();
    118             if (activity == null) {
    119                 return;
    120             }
    121 
    122             mResultCode = resultCode;
    123             mResultData = data;
    124             setUpMediaProjection();
    125             try {
    126                 setUpVirtualDisplay();
    127             } catch (IOException e) {
    128                 e.printStackTrace();
    129             }
    130         }
    131     }
    132 
    133     @Override
    134     public void onPause() {
    135         super.onPause();
    136         stopScreenCapture();
    137     }
    138 
    139     @Override
    140     public void onDestroy() {
    141         super.onDestroy();
    142         tearDownMediaProjection();
    143     }
    144 
    145     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    146     private void setUpMediaProjection() {
    147         mMediaProjection = mMediaProjectionManager.getMediaProjection(mResultCode, mResultData);
    148     }
    149 
    150     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    151     private void tearDownMediaProjection() {
    152         if (mMediaProjection != null) {
    153             mMediaProjection.stop();
    154             mMediaProjection = null;
    155         }
    156     }
    157 
    158     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    159     private void startScreenCapture() throws IOException {
    160         Activity activity = getActivity();
    161         if (mSurface == null || activity == null) {
    162             return;
    163         }
    164         if (mMediaProjection != null) {
    165             setUpVirtualDisplay();
    166         } else if (mResultCode != 0 && mResultData != null) {
    167             setUpMediaProjection();
    168             setUpVirtualDisplay();
    169         } else {
    170             startActivityForResult(
    171                     mMediaProjectionManager.createScreenCaptureIntent(),
    172                     REQUEST_MEDIA_PROJECTION);
    173         }
    174     }
    175 
    176     @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    177     private void setUpVirtualDisplay() throws IOException {
    178 
    179         mVirtualDisplay = mMediaProjection.createVirtualDisplay("ScreenCapture",
    180                 mSurfaceView.getWidth(), mSurfaceView.getHeight(), mScreenDensity,
    181                 DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
    182                 mSurface, null, null);
    183 
    184         mButtonToggle.setText(R.string.stop);
    185     }
    186 
    187     private void stopScreenCapture() {
    188         if (mVirtualDisplay == null) {
    189             return;
    190         }
    191         mVirtualDisplay.release();
    192         mVirtualDisplay = null;
    193         mButtonToggle.setText(R.string.start);
    194     }
    195 
    196 }

      上面高亮的代码作用是将截屏信息显示在界面下方Fragment的SurfaceView中,完全没有data的影子。

      6、继续查资料,在老外的文章中找到了一些零散的建议与代码,总结之后,实现代码如下:

     1 public void takeScreenshot2(View v){
     2         MediaProjectionManager projectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
     3         Intent intent = projectionManager.createScreenCaptureIntent();
     4         startActivity(intent);
     5         
     6         int mWidth = mWindowManager.getDefaultDisplay().getWidth();
     7         int mHeight = mWindowManager.getDefaultDisplay().getHeight();
     8         ImageReader mImageReader = ImageReader.newInstance(mWidth, mHeight, ImageFormat.RGB_565, 2);
     9         DisplayMetrics metrics = new DisplayMetrics();
    10         mWindowManager.getDefaultDisplay().getMetrics(metrics);
    11         int mScreenDensity = metrics.densityDpi;
    12 
    13         MediaProjection mProjection = projectionManager.getMediaProjection(1, intent);
    14         final VirtualDisplay virtualDisplay = mProjection.createVirtualDisplay("screen-mirror",
    15                 mWidth, mHeight, mScreenDensity, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
    16                 mImageReader.getSurface(), null, null);
    17         Image image = mImageReader.acquireLatestImage();
    18         final Image.Plane[] planes = image.getPlanes();
    19         final ByteBuffer buffer = planes[0].getBuffer();
    20         int offset = 0;
    21         int pixelStride = planes[0].getPixelStride();
    22         int rowStride = planes[0].getRowStride();
    23         int rowPadding = rowStride - pixelStride * mWidth;
    24         Bitmap bitmap = Bitmap.createBitmap(mWidth+rowPadding/pixelStride, mHeight, Bitmap.Config.RGB_565);
    25         bitmap.copyPixelsFromBuffer(buffer);
    26         image.close();
    27 
    28         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd_hh_mm_ss");
    29         String strDate = dateFormat.format(new java.util.Date());
    30         String pathImage = Environment.getExternalStorageDirectory().getPath()+"/Pictures/";
    31         String nameImage = pathImage+strDate+".png";
    32         if(bitmap != null) {
    33             try{
    34                 File fileImage = new File(nameImage);
    35                 if(!fileImage.exists()){
    36                     fileImage.createNewFile();
    37                 }
    38                 FileOutputStream out = new FileOutputStream(fileImage);
    39                 if(out != null){
    40                     bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
    41                     out.flush();
    42                     out.close();
    43                     Toast.makeText(this,"get phone's screen succeed",Toast.LENGTH_SHORT).show();
    44                     Intent media = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    45                     Uri contentUri = Uri.fromFile(fileImage);
    46                     media.setData(contentUri);
    47                     getApplicationContext().sendBroadcast(media);
    48                 }
    49             }catch(FileNotFoundException e) {
    50                 e.printStackTrace();
    51             }catch (IOException e){
    52                 e.printStackTrace();
    53             }
    54         }
    55         else{
    56             Toast.makeText(this,"cannot get phone's screen",Toast.LENGTH_SHORT).show();
    57         }
    58     }

      理想中,这段代码可以实现的功能有:

          a、截取手机整个屏幕信息;

          b、将屏幕信息利用ImageReader的acquireLatestImage()保存入Image对象;

          c、通过缓存读取方式赋给Bitmap对象;

          d、有了Bitmap,接下来就不解释了;

      但是,一运行就出现异常,还没来得及截程序就终止了。

      希望有兴趣的朋友可以一起交流与学习,有已经实现了该功能的大神那就最好了,求教。

    转载于:https://www.cnblogs.com/tgyf/p/4655507.html

    展开全文
  • 一种实现(无须root)手机截屏方案

    千次阅读 2017-04-01 16:54:23
    前言:一年半多以前,我们曾有个项目,要做一个截屏功能,当时负责调研的同事,答应了产品上这个功能,但开发一周后,发现,无法实现截取手机屏幕图像,须要root权限,才能做。因为最近研究MediaProjection,意外的...

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/53966818

    前言:一年半多以前,我们曾有个项目,要做一个截屏功能,当时负责调研的同事,答应了产品上这个功能,但开发一周后,发现,无法实现截取手机屏幕图像,须要root权限,才能做。因为最近研究MediaProjection,意外的发现,竟然无须root,可以轻松实现次功能。曾经被做不到的,如今做到了,很难相信此时的心情。看下今天的Agenda:

    • Android源码中使用组合键是如何实现屏幕截图功能的?
    • MediaProjection实现手机截屏效果
    • 简要思路

    以我的魅族手机为例,是同时按电源键+音量下键来实现截屏,苹果手机则是电源键 + HOME键,小米手机是菜单键+音量下键,而HTC一般是按住电源键再按左下角的“主页”键。那么Android源码中使用组合键是如何实现屏幕截图功能呢?

    Android源码中对按键的捕获位于文件PhoneWindowManager.java中 


    这里写图片描述 

    这个类处理所有的按键事件,其中函数interceptKeyBeforeQueueing()会对常用的按键做特殊处理。以我自己魅族手机为例,是同时按电源键和音量下键来截屏,那么在这个方法中可以看到这么如下代码: 
    interceptKeyBeforeQueueing 

    这里写图片描述 

    以上代码总结为:当按下音量下键时,且是down时,会进入到interceptPowerKeyDown方法中,而按下电源键时,且是down时,也会进入interceptPowerKeyDown方法中,接着进入这个方法中看下: 
    interceptPowerKeyDown 

    这里写图片描述 

    以上代码总结为:如果是interactive为true,且一些其他条件满足时,会记录电源键按下的时间,且进入interceptScreenshotChord方法中: 

    这里写图片描述 

    以上代码总结为:用两个布尔变量判断是否同时按了音量下键和电源键后,再计算两个按键响应Down事件之间的时间差不超过( // Time to volume and power must be pressed within this interval of each other. 
    private static final long SCREENSHOT_CHORD_DEBOUNCE_DELAY_MILLIS = 150;)150毫秒,也就认为是同时按了这两个键后,此种case时,才是真正的屏幕截屏的组合键。

    获取到组合键后,会用一个mHandler 开始post一个runnable,进入这个runnable中: 


    这里写图片描述 

    以上代码,会执行方法takeScreenshot方法,接着进入: 

    这里写图片描述 

    以上代码总结为:使用AIDL绑定了service服务到”com.android.systemui.screenshot.TakeScreenshotService”,注意在service连接成功时,对message的msg.arg1和msg.arg2两个参数的赋值。其中在mScreenshotTimeout中对服务service做了超时处理。接着我们找到实现这个服务service的类TakeScreenshotService,该类在(frameworks/base/packages/SystemUI/src/com/android/systemui/screenshot包下): 

    这里写图片描述 

    对应代码如下: 

    这里写图片描述 

    以上代码总结为:引用了GlobalScreenshot类,调用了takeScreenshot方法,紧接着进入: 

    这里写图片描述 

    以上代码总结为:引用SurfaceControl类,调用了screenshot方法, 传入了屏幕的宽和高,这两个参数,接着进入SurfaceControl类中,位于frameworks/base/core/java/android/view目录下: 

    这里写图片描述 

    对应screenshot方法代码如下: 

    这里写图片描述 

    screenshot 

    这里写图片描述 

    最终到达native方法中nativeScreenshot 

    这里写图片描述 

    上面就是java层的部分,接着到jni层,在\frameworks\base\core\jni\android_view_SurfaceControl.cpp中: 

    这里写图片描述 

    以上代码总结为:到jni中,映射nativeScreenshot方法的是nativeScreenshotBitmap函数,这个函数代码如下: 

    这里写图片描述 
    这里写图片描述 

    以上代码总结为:实例化ScreenshotClient类,且调用update方法,最终通过构造一个新的bitmap,把screenshot得到的像素点,及相关信息达到bitmap,通过GraphicsJNI,重新创建一个bitmap返回给上层。 
    我们接着看下ScreenshotClient的声明,位于SurfaceComposerClient.h中。注意这个类是在frameworks\native\include\gui中,而前面android_view_SurfaceControl是在\frameworks\base\core\jni\下 

    这里写图片描述 

    最后辗转来到c++层,就是\frameworks\native\libs\gui下的SurfaceComposerClient.cpp中,实现ScreenshotClient声明的函数update,如下: 

    这里写图片描述 

    以上代码总结为:通过ISurfaceComposer接口,调用captureScreen函数,我们找到其对应的实现类\frameworks\native\libs\gui\ISurfaceComposer.cpp,找到captureScreen函数的实现如下: 

    这里写图片描述 

    以上代码总结为:把IGraphicBufferProducer,作为binder开始写到parcel中,最后一版看到transact,就知道当前是client端,而server端的onTransact()函数,会接收到传过来的参数。如这里的data。接着看下BnSurfaceComposer的onTransact方法,这个BnSurfaceComposer依然是在ISurfaceComposer.cpp中。 

    这里写图片描述 

    以上代码总结为:当进入到CAPTURE_SCREEN中,data会读取IGraphicBufferProducer生成出的图像buffe,接着调用 reply->writeInt32(res);返回给client.然后再回调到java层。以上就是系统截屏的原理。

    那对于多媒体这块可以通过MediaProjection+VirturalDisplay+MediaProjectionManager来实现截屏,以下我的实例效果图:

    效果图1:操作过程,点击浮动小剪刀,就可以实现截屏,拖动小剪刀,可到任意位置: 


    这里写图片描述 

    效果图2:截图后过程 


    这里写图片描述 

    主界面: 


    这里写图片描述 

    体验apk: 
    链接:http://pan.baidu.com/s/1kVugxCV 密码:97z0

    实现思路:

    • MediaProjection是一个token,用户可以授予应用程序捕获屏幕内容和录制系统音频。
    • 屏幕截取,可以通过MediaProjectionManager的createScreenCaptureIntent,创建一个intent,保证有足够能力截取屏幕上的内容,但是没有系统声音。
    • 调用setUpMediaProjection()方法获取共享数据并对其进行赋值;若已初始化,则直接调用virtualDisplay()方法利用之前定义的变量对截屏环境进行初始化。

    第一时间获得博客更新提醒,以及更多android干货,源码分析,欢迎关注我的微信公众号,扫一扫下方二维码或者长按识别二维码,即可关注。

    这里写图片描述

    如果你觉得好,随手点赞,也是对笔者的肯定,也可以分享此公众号给你更多的人,原创不易
    展开全文
  • 使用Python3开发的一款Android截屏神器

    千次阅读 2018-08-28 21:59:52
    便可以在电脑上轻松的对手机进行截屏了,再也不需要先截个图然后登录个QQor微信将截屏发送至电脑了。同时支持`Windows`和`Mac`平台哦 需要安装Python3.7 不会安装的话网上找找教程,在配置个环境变量 现在...

    Android设备截屏神器

    只需要一根数据线将手机连上电脑(已打开USB调式并已允许调试)
    便可以在电脑上轻松的对手机进行截屏了,再也不需要先截个图然后登录个QQor微信将截屏发送至电脑了。
    同时支持WindowsMac平台哦

    需要安装Python3.7

    不会安装的话网上找找教程,在配置个环境变量

    进入到screenshot目录 使用python执行__main__.py运行程序

    $ python __main__.py

    /tools/config.json项目配置文件介绍

    { 
      //截图保存在电脑上目录
      "save_path": "/Users/azhon/Desktop/",
      // 截图成功是否删除手机上的截图
      "delete_shot": "true"
    }

    运行效果

    进行截图

    ps:我觉得测试工程师使用起来应该会倍儿爽,同意的点个赞吧 (^-^)

    源码地址在这里

    展开全文
  • 截屏可以说是苹果用户心中的一个痛点,安卓手机基本上都有的功能,苹果手机却需要借助第三方应用来完成,其实苹果手机也可以轻松完成长截屏,自从苹果手机自从更新了iOS13系统之后,苹果就可以进行长截屏了,只是...
  • 同步音频解说录制,轻松制作手机内容演示视频,视频制作者的不二选择。 滚动截图-安卓平台第一家多屏截图工具。将微信、朋友圈,网页、APP等需要滚动观看的内容一次截取成一张长图片。再多的内容都可以一次截屏搞定...
  • 在此前一段时间中,iphone手机有一项功能在抖音中非常的火爆,那就是双击iphone的小白点进行截图的功能,让你不再依赖于截屏快捷键或是实体快捷键也能进行轻松的截图。而今天我们要说的,是vivoX27手机也有这样的一...
  • 机器人扬 Robot Jan是Firefox OS的附加组件,可帮助用户更轻松,更快速地使用和配置手机截屏 奖 Mozilla附加组件Hackathon 2015最佳设计
  • 让您轻松的把截图套上手机壳,支持iPhone,华为,小米,OPPO, 三星,Watch等设备哦! 更多机型持续更新中… 此源码不需要设置安全域名即可完成运行! 真的想要上线小程序的话,一定要整个不错的名字,其重要性堪比...
  • 玩转手机 提取通讯录

    2012-07-20 23:02:16
    能向导 轻松连接 可通过USB数据线和Wi-Fi与PC连接,支持多款Android手机。海量应用 绿色安全 和安全、绿色、专业的应用商合作,海量游戏、应用免费一键下载安装。一键备份 轻松还原 ...手机截屏轻松共享。
  • OPPO手机是这几年国产手机中发展比较...OPPO手机截屏的操作并不是只有三指截屏这一种,还有不需要三指截屏就能截好手机屏幕的方法,只需要同时按下手机的音量键和开关键就可以轻松的截下自己的手机屏幕。 2、后台...
  • Android手机,数据线 ADB环境 Python环境(本例使用3.6.1) TensorFlow(本例使用1.0.0) 2.大致原理 使用adb模拟点击和截屏,使用两层卷积神经网络作为训练模型,截屏图片作为输入,按压毫秒数直接作为为输出。 3....
  • 好卓手机助手,还有文件管理、手机截屏手机同屏等手机管理功能,简洁易用。更有更多更好用的功能正在开发中,敬请期待... 好卓手机助手 v3.1.90.911 电脑版 更新日志 1.【新增】手机视频管理,照片、视频全管理...
  • 手机助手 v2.1.1

    2014-09-01 21:01:17
    2345王牌手机助手是一款非常实用的安卓手机同步工具,2345王牌手机助手提供了上万款精品安卓软件、安卓游戏一键下载安装,它的每一个应用都是经过细选,保证了应用的安全性,让您轻松下载、安装、管理安卓手机资源。...
  • 截屏可以说是平常使用手机都会用到的功能,特别是截长屏,在安卓手机中是一件非常轻松简单的事情,但在苹果手机中却是非常麻烦的。 其实在ios13中就新增了截长屏功能,不仅非常简单,而且还是手机自带,大家不会不...
  • 91助手3 iOS&安卓版,还有一键转机、手机备份还原、手机联系人管理、手机短信管理、文件管理、手机截屏手机同屏等手机管理功能,简洁易用。泡91,淘应用,轻松享受智能生活! 【更新日志】安卓+iOS设备:1. 独家...
  • 将魔乐手机管家安装到您的PC上,然后通过数据线或WIFI两种方式将手机连接至PC,您就可以通过它轻松实现短信收发、通讯录管理、手机资源管理、文件夹管理、资料备份。另外更有海量的手机软件、游戏、壁纸、电子书、...
  • 手机游戏《魔塔》实现细节——(1)需求收集 本文只简单说一下我的收集需求的过程,并将所收集到的需求(游戏设计,游戏策划)的草稿罗列一下,需求的分析或解决方案将放在后面的文章。 收集需求过程 我首先将...
  • 3.登录扣扣(手机扣扣会被下线),电脑也要登录扣扣,设置好允许电脑扣扣可以同时登录,主要是我们要用到扣扣的截屏快捷键,这个容易吧 4.别人给你发闪照,在模拟器内的扣扣点开先让它变大,两个手指先按住Ctrl+Alt ...
  • DDMS for Phone

    千次阅读 2016-03-07 14:54:25
    DDMS for Phone今天要去工厂为设备截屏,想到又要背上沉重的电脑,再结合任务比较单一,只是截屏。...现在手机都支持OTG了,如果手机上再有一个类似DDMS的软件,那么我就不用背着电脑过去了,手机就能轻松搞定。
  • 小萝贝控机大师

    2016-08-10 14:46:27
    电脑控制多部手机—电脑端安装,手机端无需root,无需安装APK互联网时代,大家都离不开手机与电脑,工作娱乐每天都会用到,向大家推荐一款电脑端小软件仅5M,可以轻松电脑控制手机手机画面映射到电脑端后,能进行...
  • UU手游浏览器 v1.1.0.zip

    2019-07-17 04:07:34
    集成了手机游戏攻略、手机游戏资讯、手机游戏下载等丰富的内容,让玩家一打开浏览器就能轻松方便的获取手机游戏相关内容。填补了手机游戏浏览器领域的空白,是手机游戏玩家的必备浏览器软件。   功能特点: 全新...
  • 屏幕快照Easy Pro使您可以轻松地在平板电脑,手机或其他Android设备上截屏!屏幕录像机使您可以捕获可以轻松与朋友共享的视频。使用滚动屏幕截图功能捕获全屏滚动页面。网站屏幕截图可捕获高质量的完整大小的网页。 ...
  • 如今的手机做的是越来越人性化了,特别是有些功能,用起来让人爽到不行,以至于用起来上瘾,不管啥场合都忍不住想用。 比如今天想吐槽截屏这个事,各家厂商设计的快速截屏一个比一个风骚,比如华为的: 小米的: ...
  • 91助手 3.3.7.1023版

    2013-09-29 11:16:08
    91手机助手3 iPhone&安卓版,还有一键转机、手机备份还原、手机联系人管理、手机短信管理、文件管理、手机截屏手机同屏等手机管理功能,简洁易用。泡91,淘应用,轻松享受智能生活。 最新特性: 完美支持...
  • 天天记事 V1.0.5.rar

    2019-07-11 05:35:41
     截图记事:轻松截屏 捕捉精彩:  在电脑上发现喜欢的美食旅游等信息,想保存下来随时查看,用天天记事的快捷键或浮动条一键截屏,快速截取和记录喜欢的图文。  云同步:一键同步,云端存储:  一键备份记事...
  • AirDroid电脑版 v3.6.5.0

    2019-08-16 15:45:55
    用户可以通过该软件进行包括安装卸载程序、管理联系人、收发短信、查看通讯记录、上传下载文件、手机截屏等等,它就是一个无需数据线的无线PC套件。该软件最大的特点就是工作时,不会错过任何重要通知,电脑和手机...
  • 一个小型的日记应用程序,带有心情跟踪器,标签,全文搜索以及轻松嵌入手机中的照片的功能。 特征 轻松将照片上传到开放的日记文档中。 您可以先在智能手机上转到/ photo,然后将图像通过Websocket发送到打开的日志...

空空如也

空空如也

1 2 3
收藏数 56
精华内容 22
关键字:

手机轻松截屏