这里介绍一款工具——Droid@screen,用来获取手机屏幕,显示在PC屏幕上。它集截图、录像等多种功能于一体。 安装 ---- 1. ...设置ANDROID_HOME环境变量指向AndroidSDK主目录(这步如果不做,则需要在droidAtScreen主界面手动设置adb的绝对路径,效果一样)。 5. ...安装你的Android设备的USB 驱动,需要支持adb的驱动。 6. ...开启Android设备的USB Debugging选项(Settings-> Developer options -> USB debugging) 7. ...用USB线将PC和Android设备连接起来,可以在cmd中输入adb devices确保你的设备已经被识别到。出现异常的情况下可以拔出USB线再插入进行再次识别。
使用 WeakLock 保持 CPU 唤醒 ( 费电操作 ) 1、保持 CPU 唤醒 2、使用 WeakLock 保持 CPU 唤醒流程 3、使用 WeakLock 保持 CPU 唤醒代码示例 二、屏幕唤醒...Android 设备休眠次序 : Android 设备长时间不使用时 , ① 屏幕先变暗 , ② 然后屏幕关闭 , ③ 最后关闭 CPU ; 2 ....-- WeakLock 保持 CPU 唤醒的 Service 服务 --> <service android:name=".WeakLockService"...WeakLockService extends Service { public static final String TAG = "WeakLockService"; /** * 唤醒锁定...= null){ mWakeLock.release(); } } } 二、屏幕唤醒 ---- 屏幕唤醒操作 : ① 代码中设置 : 在 Activity
用过ActivityManager的童鞋估计都知道,可以从ActivityManager里面可以获取到当前运行的所有任务,所有进程和所有服务,这是任务管理器的核心。...仔细看getRunningTasks的文档,里面说获取的是系统中"running"的所有task,"running"状态包括已经被系统冻结的task。...而且返回的这个列表是按照顺序排列的,也就是说第一个肯定比第二个后运行。 getRunningTasks有个整型参数,表示返回列表的最大个数。...那么,我们如果把1作为参数给进去,那么他返回的task就是当前运行的那个task,然后从task中获取到最顶层的activity,这个activity就是当前显示给用户的那个activity了。...("", "pkg:"+cn.getPackageName()); Log.d("", "cls:"+cn.getClassName()); 至于这个能做什么,嘿嘿,我相信你知道的。
在 elementary OS 中改变锁屏或登录屏背景的灰色默认壁纸是有点困难的。典型的用图像文件的路径改变 greeter 的配置是行不通的。...不幸的是,这不是一个更简单的解决方案,因为灰色背景是一个图像文件,它的数据是硬编码在 greeter 中的,需要用新的图像重新编译才能使其发挥作用。...下面是方法: 改变 elementary OS 锁定和登录屏幕背景 在 elementary OS 中打开一个终端。...elementary OS 使用一个 100×100px 的 PNG 文件作为登录屏幕/锁屏的默认背景。该图像是平铺的,给人一种灰色背景的感觉。...而你应该在 elementary OS 的登录屏上看到你的墙纸。 这个指南应该可在 elementary OS 6 Odin、elementary OS 5 Juno 及以下版本中可用。
做为一个不那么像初学者的初学者,我注意到Android已经提供了检测屏幕方向的API,而我在《Android 4编程入门经典——开发智能手机与平板电脑应用》书中经常看到的做法却是比较屏幕的宽度和高度以此来判断是横向还是纵向模式...书中做法 import android.view.Display; import android.view.WindowManager; @Override public void onCreate(...); } else { //---portrait mode--- Log.d("Orientation", "Portrait mode"); } } 而一般利用Android...提供的方法可以这么做 if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
窗口管理知识图谱.png WMS的作用是窗口管理 不负责View绘制 既然是概述,我们不妨直观的思考一个问题,Activity是如何呈现到屏幕上的,或者说View是如何被绘制到屏幕上来的?...更像在更高的层面对于Android窗口的一个抽象,真正完成图像绘制的是APP端,而完成图层合成的是SurfaceFlinger服务。...wmParams.width = 800; wmParams.height = 800; mWindowManager.addView(mview, wmParams); 以上代码可以在主屏幕上添加一个...,但是从直观理解上,比较像子窗口(其实不是)。...,通知SF图层混排,之后,SF再将数据渲染到屏幕。
知晓当前在哪一个活动 工作当中可能接手一份别人的代码,当需要在某个界面修改东西的时候,却找不到这个界面对应的是哪个活动。...现在点击按钮分别进入三个活动, 可以看到把当前活动的类名打印了出来。...()方法,表示将当前正在创建的活动添加到活动管理器里, 然后在Base中重写onDestroy()方法,并调用ActivityCollector的removeActivity()方法,表明将一个马上要销毁的活动从活动管理器里移除...(android.os.Process.myPid()); } }); } 加上了杀掉当前进程的代码,以保证程序完全退出, android.os.Process.killProcess...(android.os.Process.myPid()); killProcess()方法用于杀掉一个进程,接收一个进程ID参数,我们可以通过myPid()方法来活动当前程序的进程ID, 需要注意的是
中通过标签指定android:launchMode属性来选择启动模式。...,每次启动活动都会创建该活动的一个新的实例。...修改AndroidManifest.xml标签中主活动的启动模式: android:name=".MainActivity" android:launchMode="singleTop..." android:label="This is MainActivity"> 然后运行以后查看logcat,创建了一个实例,然后在点击按钮,不会再产生新的实例。...,并把整个活动之上的所有活动统统出栈,如果没发现就会创建一个新的活动实例。
探究Android活动的小技巧 1.找出当前的活动 当我们在查看别人的代码的时候可能不能第一眼就发现首次的活动是哪一个,我们可以通过以下的方法来找出当前的主活动是哪一个: 新建一个BaseActivity...import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.util.Log...:"+ getClass().getSimpleName()); } } 然后让其他的类继承这个类这样当我们启动程序的时候就可以在log日志中找出当前执行的是哪一个活动. 2.随时随地退出程序 新建一个...import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast...}); } } 3.启动活动的最佳方法 SecondActivity添加如下代码: public static void actionStart(Context context
判断当前屏幕方向 方法1....设置屏幕方向 1....配置AndroidManifest.xml 在activity 中加入 android:screenOrientation="landscape" 属性。...处理Activity的配置变更 有些设备配置可能会在运行时发生变化(例如屏幕方向、键盘可用性及语言)。 发生这种变化时,Android 会重启正在运行的 Activity。...(目标API>13时必需) 参考:https://developer.android.com/guide/topics/resources/runtime-changes.htmlAndroid设备屏幕方向的一二事
大家好,又见面了,我是你们的朋友全栈君。...主要是固定一个UI尺寸,比如宽度360,然后为了各个density显示的宽度都是360dp,则通过 :px=dp * density, density =screenWidthPx / 360; 记录下文章...假设我们设计稿是宽度是 1080px,资源放在 xxhdpi,那么我们宽度转换为 dp 就是 1080 / 3 = 360dp,要在不同设备上宽度都表现为 360dp,那么就需要修改其 density...() 是不同的引用,所以在 API 26 及以上适配是没有影响的,但在 API 26 以下 Activity#getResources()#getDisplayMetrics() 和 Application...#getResources()#getDisplayMetrics() 是相同的引用,导致适配有问题,这里要感谢 @MirkoWu 提出的问题,后面会有解决之法。
文章背景:工作中,有时候需要判断图片中不同位置的颜色。有些颜色不太容易区分,所以想通过Python编写代码,通过屏幕取点,获取某个位置的颜色值。...代码逻辑: (1)文末参考资料[2]的csv文件(记为颜色表)中给出了865种颜色的英文名称和对应的RGB数值,在此基础上,笔者添加了相应的中文名称,如下表所示。...(2)通过鼠标在屏幕上取点,获取指定位置的RGB数值,然后与颜色表中各行的RGB数值进行匹配,返回RGB数值最接近的颜色信息。...,Windows上以RGB图像的形式返回。...buttonCapture.wait_window(w.top) # 截图结束,恢复主窗口,并删除临时的全屏幕截图文件 root.state('normal') os.remove
有四种一般的尺寸: 小,一般大,大,超大 还有四种一般的像素密度: 低 (ldpi), 中 (mdpi), 高 (hdpi), 超高 (xhdpi) 为了声明你想要使用在不同屏幕上的布局和位图...你也要也要意识到屏幕方向(横向或者纵向)也要被考虑成一种屏幕尺寸,所以许多的应用会修改布局来优化用户在不同的屏幕方向上的体验 ....创建不同的布局 ---- 为了在不同的屏幕尺寸上优化你的用户体验,你应该为每一个你想要支持的屏幕尺寸创建单独的文件 ....注意 : Android 会自动缩放你的布局,来适当的适应屏幕 ....更多有关Android如何选择对应的资源的信息可以在 提供资源 指南中找到 .
Android涉及各种各样的支持不同屏幕尺寸和密度的设备。对于应用程序,Android系统通过设备和句柄提供了统一的开发环境,大部分工作是校正每一个应用程序的用户界面到它显示的屏上。...你应该利用Android系统的这些特性去为每一个屏幕配置优化你的应用程序界面,并且应确保你的应用程序不仅能正常运行,而且应尽可能地在每一个屏幕上提供最好的用户体验。...这个基线是基于第一个Android 上电设备,T-Mobile G1的屏幕配置,它具有HVGA屏幕(直到Android1.6,这是Android支持的唯一的屏幕配置)。...然而,谷歌播放目前不支持过滤属性(在Android3.2上),因此,如果应用程序不支持小屏幕,应该继续使用其它尺寸的属性。...更多关于这些属性的信息,请查阅以上相应的链接。 最佳实践 支持多个屏幕的目的是为了创建一个能正常运行,且在任何Android支持的广义的屏幕配置上看起来都很舒服的应用程序。
返回栈 Android中的活动是可以层叠的,每启动一个新的活动,就会覆盖在原活动之上, 然后点击Back键就会销毁最上面的活动,下面的活动就会重新显示出来。...Android是用任务(Task)管理活动的,一个任务就是一组存放在栈里的活动的集合, 这个栈也被称作返回栈(Back Stack)。栈是一种后进先出的数据结构。...活动状态 每个活动在其生命周期中最多可能有4中状态, 运行状态 处于返回栈栈顶。 暂停状态 不处于栈顶位置,但仍可见,因为并不是每一个活动都占满整个屏幕的,比如对话框形式的活动。...销毁状态 一个活动从返回栈移除就成销毁状态了,系统最倾向回收这种状态的活动。 活动的生存周期 Activity类定义了7个回调方法,覆盖了活动生命周期的每一个环节。...前台生存期: 活动在onResume()和onPause()之间经历的就是前台生存期,这期间活动总是处于运行状态的,此时的活动是可以和用户进行交互的,平时接触最多的也就是这个状态下的活动。
这每个活动中我们都重写了这个方法,它会在活动第一次被创建的时候调用。你应该在这个方法中完成活动的初始化操作,比如说加载布局、绑定事件等。 onStart()。...这个方法在活动由不可见变为可见的时候调用,对资源进行加载。 onResume()。这个方法在活动准备好和用户进行交互的时候调用。此时的活动一定位于返回栈的栈顶,并且处于运行状态。...这个方法在系统准备去启动或者恢复另一个活动的时候调用。我们通常会在这个方法中将一些消耗CPU 的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。...它和onPause()方法的主要区别在于,如果启动的新活动是一个对话框式的活动,那么onPause()方法会得到执行,而onStop()方法并不会执行。 onDestroy()。...---- 活动被回收前的数据保存与恢复 onSaveInstanceState()回调方法可以保证在活动被回收之前一定会被调用,因此我们可以通过这个方法来解决活动被回收时临时数据得不到保存的问题。
Android屏幕适配AndroidAutoSize的使用 AndroidAutoSize的使用 加入依赖 配置AndroidManifest.xml主单位或者副单位 主单位的配置 副单位的配置 初始化...主单位的使用 副单位的使用 AndroidAutoSize的使用 记录一下Android屏幕适配框架的使用 加入依赖 implementation ‘me.jessyan:autosize:1.2.1...false, 如果设置为 false, 在以屏幕高度为基准进行适配时 //AutoSize 会将屏幕总高度减去状态栏高度来做适配 //设置为 true 则使用设备的实际屏幕高度, 不会减去状态栏高度...//在全面屏或刘海屏幕设备中, 获取到的屏幕高度可能不包含状态栏高度, 所以在全面屏设备中不需要减去状态栏高度,所以可以 setUseDeviceSize(true) isUseDeviceSize...在1080*2160 DPI400显示效果 在Pixel_XL 1440*2560 560DPI显示效果 可以看到底部的两块区域刚好填充完屏幕 副单位的使用 初始化 //AndroidAutoSize
UI布局 确保正确的布局应用在正确的设备屏幕上 提供可以根据屏幕大小自动伸缩的图片 使用 "wrap_content" 和 "match_parent" 为了确保你的布局能够自适应各种不同屏幕大小...QVGA屏幕上显示的结果。...下图展示了这个布局在一个更大的屏幕上显示的结果。 可以注意到,即使屏幕的大小改变,视图之前的相对位置都没有改变。...现在有很多的应用程序为了支持大屏设备,都会实现“two pane”模式(程序会在左侧的面板上展示一个包含子项的List,在右侧面板上展示内容)。...例如,7寸的平板最小宽度是600dp,所以如果你想让你的UI在这种屏幕上显示two pane,在更小的屏幕上显示single pane,你可以使用sw600dp来表示你想在600dp以上宽度的屏幕上使用
屏幕亮度调节 //设置应用中的亮度 不保存 public void Brightness(View view){ boolean autoBrightness = BrightnessTools.isAutoBrightness...; import android.content.ContentResolver; import android.net.Uri; import android.provider.Settings; import...; /* Android的屏幕亮度好像在2.1+的时候提供了自动调节的功能, * 所以,如果当开启自动调节功能的时候, 我们进行调节好像是没有一点作用的, * 这点让我很是无语,结果只有进行判断...,看是否开启了屏幕亮度的自动调节功能。...e.printStackTrace(); } return automicBrightness; } /** * 获取屏幕的亮度
case MotionEvent.ACTION_UP: //将路径画到bitmap中,即一次笔画完成才去更新bitmap,而手势轨迹是实时显示在画板上的...case MotionEvent.ACTION_UP: //将路径画到bitmap中,即一次笔画完成才去更新bitmap,而手势轨迹是实时显示在画板上的...break; } // 更新绘制 invalidate(); return true; } // 手指点下屏幕时调用...mPath.moveTo(x,y); } // 手指在屏幕上滑动时调用 private void touchMove(MotionEvent event) {...3时,生成贝塞尔绘制曲线 if (dx >= 3 || dy >= 3) { // 设置贝塞尔曲线的操作点为起点和终点的一半 float