Cafeting

一个人的行走范围,就是他的世界。

获取指定包名的 APP 是否还在后台运行,判断 APP 是否存活。

背景

可以根据 App 是否有 Service 分两类情况处理:

  • 没有 Service
  • Service

对于没有 Service 的 App,程序一旦切换到后台,可能很快就被回收了,这里使用 ActivityManager.getRunningTasks(int maxNum) 方法来获取当前正在运行的任务,注意:此方法并不被系统推荐,且是一个 Deprecated 的方法。

对于有 Service 的 App,大多会有多个 Service ,且有可能都是 :remote 类型的,这样在判断上需要进行一定的处理,这里根据 App 的 uid 来判断,避免在一些特殊的情况下判断存活不准确的问题。我们使用 ActivityManager.getRunningServices(int maxNum) 方法获取当前运行中的 Service 列表。

注意:App 的 uid 对于系统内置 App 而言不是唯一的,Android 内置的应用会有共用 uid 的情况。如果你是开发系统内置应用或者类似的东西,务必要自行进行特殊方式检查。

阅读全文 »

翻译自:Using app encryption in Jelly Bean

关键词 : adb install -l


最新的 Android 4.1(Jelly Bean)版本在上周的 Google I / O 大会上发布了,它有一大堆新功能和改进。 其中一个有趣的功能是应用程序加密,除了简短的说明还没有任何细节:“从 Jelly Bean 版本起,Google Play 中的付费应用程序在分发和存储之前,会使用设备特定的密钥加密”。缺乏细节当然会引起猜测,有些人甚至担心,当他们使用一个新的设备时必须回购他们的付费应用程序。 在本文中,我们将介绍如何在操作系统中实施应用加密,展示如何在不通过 Google Play 的情况下安装加密的应用,并了解 Google Play 如何提供加密的应用。

操作系统对加密应用程序的支持

本文之前的版本是基于 Eclipse 框架和二进制的系统镜像,并且缺少一部分。由于 Jelly Bean 已经开源,下面的讨论已经修改,现在是基于 AOSP 代码(4.1.1_r1)。如果你回来重读本文,重点放在第二部分。

阅读全文 »

在编译原生 Contacts 应用时需用到非公开的 API,需要引入 framework 等 jar 包,但在 Android Studio 中 SDK 带的 jar 包的优先级最高,导致引入的 framework 等 jar 包无法被引用,请问如何将 framework 等 jar 包的优先级调成最高?

—— 知乎 在 Android Studio 中如何将依赖的 jar 包放在 SDK 的 android.jar 前?

这是在知乎上的原问题的描述。尝试了该问题下面的多个答案,并没有十分完美的方案,直到一个为公司编译 Android 系统的同事,最近无奈转战到 Android Studio 开始…..

背景

先了解一些基础点:

Android Studio 中的六种依赖

Compile,Provided,APK,Test compile,Debug compile,Release compile

阅读全文 »

背景

Android 官方推荐使用 DialogFragment 来代替 Dialog ,可以让它具有更高的可复用性(降低耦合)和更好的便利性(很好的处理屏幕翻转的情况)。

而创建 DialogFragment 有两种方式:

  1. 覆写其 onCreateDialog 方法 — ①
  2. 覆写其 onCreateView 方法 — ②

虽然这两种方式都能实现相同的效果,但是它们各有自己适合的应用场景:

  1. 方法 ①,一般用于创建替代传统的 Dialog 对话框的场景,UI 简单,功能单一。
  2. 方法 ②,一般用于创建复杂内容弹窗或全屏展示效果的场景,UI 复杂,功能复杂,一般有网络请求等异步操作。
阅读全文 »

使用 RadioGroup 和 ViewPager 实现更加可定制的效果。

背景

昨天设计图刚出一点,写了《Android 必知必会 - 动态切换着色模式和全屏模式》,记录了动态修改页面显示模式的方式。今天又有新图,不过设计师只考虑 iOS 平台的设计,拿到设计图发现 TabLayout + ViewPager 的套路实现起来很麻烦,考虑了下,为了方便,决定使用 RadioGroup + ViewPager 来实现,之所以使用 RadioGroup ,是因为它内部多个 RadioButton 的状态是互斥的,也就是只有一个是选中状态,不需要我们进行多余的处理。总体来说比较简单,就是细节略多了点。

主要知识点:

  • 自定义 RadioButton 样式 : selector + shape
  • 自定义 RadioButton 文字样式 : selector
  • ViewPager + Fragment 及其适配器
  • RadioGroup 状态监听
  • ViewPager 页面切换监听
阅读全文 »

通过代码动态切换页面的着色模式全屏模式,兼容 Android 4.4 +

本文假设读者已经了解着色模式和全屏模式(沉浸模式)。

背景

公司的 APP 设计图仅有 iOS 版的,对于 Android 平台,它整体算是着色模式,但是在个人页面是全屏模式(沉浸模式),实现设计图时,我使用的是一个 Activity + 四个 Fragment 实现的。

阅读全文 »

两种使用 BitmapTransformation 来实现Glide 加载圆形图片和圆角图片的方法。

背景

Glide 并不能直接支持 Round Pictures ,需要使用 BitmapTransformation 来进行处理。

Round Pictures: CircleImageView / CircularImageView / RoundedImageView are known to have issues with TransitionDrawable (.crossFade() with .thumbnail() or .placeholder()) and animated GIFs, use a BitmapTransformation (.circleCrop() will be available in v4) or .dontAnimate() to fix the issue.

这里介绍下网上常见的方式和使用 RoundedBitmapDrawable 两种方法,本质上是差不多的:

  • 使用 CanvasPaint 来绘制
  • 使用 Android.support.v4.graphics.drawable.RoundedBitmapDrawable

PS: RoundedBitmapDrawablesupport.v4 下的一个类,想了解更多,可以阅读我之前的文章:Android 必知必会-使用 supportV4 的 RoundedBitmapDrawable 实现圆角

阅读全文 »

使用 LeanCloud 的 REST API 来自定义短信验证码相关功能,不再需要臃肿的 SDK 。

背景

公司的项目仅仅使用了 Leancloud 短信功能来发送验证码,刚开始 Leancloud 的短信 SDK 还会和项目中的 okhttpfastjson 产生冲突,后来使用了独立的命名空间解决了冲突,但这样处理会导致项目中产生大量的冗余库。在仅仅使用短信验证码功能 SDK 的情况下会有下列文件被引入到项目中:

  • avoscloud-sdk-v3.13.8.jar
  • fastjson-1.1.39-leancloud.jar
  • okhttp-2.6.0-leancloud.jar
  • okio-1.6.0-leancloud.jar

本来开发 Android 时,大家都尽量避免触碰 64K 个方法的限制,对于发验证码这样一个简单的事情,还需要引入大量的第三方库实在是难以接受。

在目前开发的新项目中,我尽量控制第三方库的筛选和使用,不想引起启用 Multidex 导致应用启动慢的问题。直到我发现 Leancloud 的 REST API ,顿时觉得里面有搞头,对,大有搞头

阅读全文 »
0%