十个雨点 发布于 01月19, 2017

通过ContentProvider多进程共享SharedPreferences数据

开发一个多进程应用的时候,我们往往无法避免在多个进程之间共享数据。 多进程共享数据的方法有很多种,在Android中常用的有:SharedPreferences(多进程模式)、广播、Socket、ContentProvider、Messenger、AIDL等。这些方法适用于不同的使用场景,又有各自的局限性。

本文即将介绍的是通过ContentProvider,结合SharedPreferences(以下简称SP)实现的进程间共享设置项的功能。这种方式主要适用于以下场景:在一个进程中进行一些设置,而需要在另一个进程实时读取设置,并根据这些设置来执行功能。

阅读全文 »

十个雨点 发布于 01月15, 2017

通过辅助模式获取点击的文字

在准备实现Bigbang的功能的时候,第一个需要解决的重大问题就是——如何像在锤子手机上一样方便的取词。好在有个同事做过辅助服务相关的功能,给我们提供了一个解决方案:通过辅助服务能够获取对View的点击和长按事件,并取得View的内容。

阅读全文 »

十个雨点 发布于 01月09, 2017

4种获取前台应用的方法(肯定有你不知道的)

我目前已知,并且尝试过的获取当前前台应用的方法有如下几种:

  1. Android5.0以前,使用ActivityManager的getRunningTasks()方法,可以得到应用包名和Activity;
  2. Android5.0以后,通过使用量统计功能来实现,只能得到应用包名;
  3. 通过辅助服务来实现,可以得到包名和Activity;
  4. Android5.0以后,可以通过设备辅助应用程序来实现,能得到包名和Activity,不过这种方式必须用户主动触发(长按Home键)

阅读全文 »

十个雨点 发布于 01月06, 2017

Android如何判断NavigationBar是否显示(获取屏幕真实的高度)

有些时候,我们需要知道当前手机上是否显示了NavigationBar,也就是屏幕底部的虚拟按键。

比如截屏的时候,要获取屏幕的高度,必须包括NavigationBar的高度。

试过网上的多种方法,但是对那种可以通过手势来显示/隐藏的NavigationBar没办法,最后终于找到了一个好办法,看代码:

阅读全文 »

十个雨点 发布于 01月01, 2017

如何在Bitmap截取任意形状

现在许多截屏应用中都实现了任意形状截图,我一开始有些疑惑:到底是如何判断一个像素点是在曲线内部还是外部的呢,因为多边形是否包含点的判断还是比较复杂的,计算起来复杂度可不低,后来看了一些资料,发现完全不是我想的那么复杂,很简单就能实现。多简单呢,往下看。

阅读全文 »

十个雨点 发布于 12月29, 2016

Android上如何实现矩形区域截屏

对屏幕进行截屏并裁剪有两种方式:早截图和晚截图。早截图,就是先截取全屏,再让用户对截取到的图片进行修改;与之相对的,晚截图,就是先让用户在屏幕上划好区域,再进行截图和裁剪。其实两者并没有什么太大的区别,这篇就说说怎么实现晚截图。

晚截图可以分成三步:

  1. 在屏幕上标出截图的矩形区域
  2. 调用系统接口截屏
  3. 对截图进行裁剪

阅读全文 »

十个雨点 发布于 10月08, 2016

ValueAnimator是如何动起来的

今天看属性动画的源码,涉及到的类比较多,调用关系也比较复杂,用了一个多小时才算大致理清其中的逻辑,简单的整理出来以备日后回顾,源码是 API level 24的。

阅读全文 »