Beformat—防止手机数据恢复

给这个工具生拼硬造一个单词 Beformat —— Before Format. 在处理旧手机时,一般都是恢复出厂设置。恢复出厂设置时对存储空间(特指外部存储空间)只是简单的格式化一下。在没有被写入新数据前,手机上存储的旧数据(照片视频等)依然存在,用 EasyRecovery 等数据恢复工具是有可能还原手机存储的数据。 所以 Beformat 这个 App 就是清理存储空间,然后生成大量无用数据文件,直到几乎填满存储空间。之后再使用系统的恢复出厂设置,这样即便使用数据还原工具也只能还原出之前生成的无用数据。因为 App 权限有限,只能对外部存储空间区域进行读写,不能擦除其他系统分区 ( /data ) 的数据。 Github : Beformat 下载 APK : Beformat releases 题外话,每次帮长辈卖掉旧手机时都被叮嘱手机数据要清理干净,一般正规手机回收商应该不在意这种手机数据,但图个安心的话,恢复出厂设置前后都可以擦除一下手机数据。…

Read this article

FadingEdge 分析

最近设计需求要有边缘透明的淡入淡出,完成后发现其中的原理挺有意思的,于是分析一下系统是怎么生成边缘淡化 (FadingEdge)。 相关代码参见 FadingEdgeResearch 一. 系统滑动控件 使用 RecyclerView / ScrollView 等系统提供的可滑动控件,需要边缘淡化很简单,在 xml 中加入 android:requiresFadingEdge 指定需要淡化的方向即可。 跟踪 android:requiresFadingEdge 初始化设定的位置,是在最基本的 View 控件内。当 View 绘制时满足特定条件就会用内部的 ScrollabilityCache 绘制滚动条、边缘淡化等滑动用的元素。 抛开 ScrollabilityCache ,看看 View 的 draw(Canvas canvas) 方法,源代码里写得很清楚: /* * Draw traversal performs several drawing steps which must…

Read this article

应用加固后 APK 重签名脚本

360市场强制使用加固宝才能上传,应用宝使用乐固能加分,越来越多应用市场“推荐”使用自家加固服务。导致批量打包后还要挑出个别渠道进一步处理才能完事,好麻烦。 而且各家应用加固的重新签名工具都是 Windows 下的,在 mac OS 下每次都敲代码签名也好麻烦。所以写个脚本保存一下签名路径和密码,自动签名和重命名输出。批量使用的话,可以再套一个脚本循环调用即可。 详细见: SignAfterProtected Update: 签名方式由 jarsigner 更换为 apksigner , 可以默认使用 APK Signature Scheme v2…

Read this article

Android 7.0 网络变化监听

一般监听网络变化是在 AndroidManifest 中注册 BroadcastReceiver 来实现。 targetSdkVersion 升级到 24 后,发现静态注册广播的方式要被取消了。 Declaring a broadcastreceiver for android.net.conn.CONNECTIVITY_CHANGE is deprecated for apps targeting N and higher. In general, apps should not rely on this broadcast and instead use JobScheduler or GCMNetworkManager. Android 7.0 为了后台优化,推荐使用 JobScheduler 代替 BroadcastReceiver…

Read this article

沉浸式中显示 PopupWindow

在全屏沉浸模式时(Immersive Full-Screen Mode),如果弹出 Dialog 或 PopupWindow,则会自动退出沉浸模式。 退出沉浸式的原因是因为 Activity 的 Window 焦点被抢走了,Window 中的 DecorView 状态改变导致了退出。 如果要继续保持沉浸模式。对于 Dialog 情况,这里有解决办法 。 Dialog 在初始化时会生成新的 Window,先禁止 Dialog Window 获取焦点,等 Dialog 显示后对 Dialog Window 的 DecorView 设置 setSystemUiVisibility ,接着再获取焦点。 这样表面上看起来就没有退出沉浸模式。 而 PopupWindow 并没有创建新的 Window,只是将 PopupWindow 的 View 添加到当前的…

Read this article

GroupSnapHelper

Android Support Library v24.2.0 版中,RecyclerView 新增加了 OnFlingListener 接口, 同时提供了SnapHelper 抽象类和 LinearSnapHelper 实现类,用来处理在滚动过程中的定位。试用了一下 LinearSnapHelper , 使用的场景类似 WheelPicker 或 ViewPager,滚动后能将最接近 RecyclerView 中心的 closestItem 滚动居中。 想了一下,可以用这一特性来实现滑动一组 items ,代替 ViewPager 嵌套 RecyclerView 的情况。 如图: 代码见 GroupSnapHelper 在 LinearSnapHelper 和 SnapHelper 之间绕了半天,发现其实实现起来也挺简单的,在 LinearSnapHelper 基础上根据查找到的 closestItem , 再查找计算包含 closestItem…

Read this article