Cafeting

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

关键词:GridView ListView EmptyView SwipeRefreshLayout

在使用 GridView、ListView 时经常需要处理无数据的情况,给用户一些必要的提示。而 GridView 和 ListView 可以使用 setEmptyView() 方法来设置无数据时展示的 View 。

本文讲一下 EmptyView 的基本用法以及如何配合 SwipeRefreshLayout 使用。

阅读全文 »

近期有网友根据 Android 必知必会 - DialogFragment 使用总结 做一些业务,但是目标却是用 DialogFragment 实现类似 PopupWindow 效果:

  • 只拦截自身所占空间部分的事件,其余空间的点击事件不处理
  • 可以根据某个 View 定位自身位置

虽然在功能上 PopupWindow 更符合需要,但是使用 DialogFragment 代码更简洁、更方便封装功能模块。

阅读全文 »

最近使用 ThinkPHP3.2.3 进行 API 开发,发现 ThinkPHP3.x 查询数据库返回所有字段值类型都是 String。以前开发 web 的时候没怎么注意这个,现在发现用到 API 开发很难办,数据类型不对,不能每个字段都让客户端自己强制转换一下。

查资料后发现 ThinkPHP3.x 的 Model.class.php,提供了 _parseType 方法,在查询完以后进行类型转换,但需要我们手工调一下。

阅读全文 »

今天收到邮件提示 exploded-aar 目录问题在 gradle plugin 2.5 版本修复好了。

Marked as Fixed

in 2.3/2.4 you can look in the build cache entries and look in the input file that indicate the source of the cache entry (maven coordinate).
in 2.5+ we switched to Gradle’s own cache so you’ll have to look in the gradle folder.
If all you need is manually get the aar content you could also manually download the aar and unzip it yourself.

查看 Issue 详情(需要梯子):Issue 页

— 更新于 2017-05-11


升级到 Android Studio 2.3 后,Gradle Plugin 也升级到 2.3.0,对应推荐使用的 Gradle 版本是 3.3。

这时候会发现项目目录下 {module name}/build/intermediates/exploded-aar/ 目录没了,经过一番查找,发现这并不是一个 Bug,是官方刻意为之,它会在 {user name}/.android/build-cache 下生成一部分缓存文件,来代替 exploded-aar ,如果需要生成它,可以配置项目目录下的 gradle.properties ,添加一行内容:

1
android.enableBuildCache=false
阅读全文 »

错误提示如下:

1
2
Gradle sync failed: Cause: error in opening zip file
Consult IDE log for more details (Help | Show Log)

今天升级 2.2 到 2.3 后打开一个项目提示升级 gradle,就同意了,结果报了上面的错误。

大概原因应该是下载的最新的 gradle 包有问题,新升级后配置的代理失效了。

操作如下:

  1. 删除项目目录下的 .gradle/ 整个项目
  2. 查看 gradle/wrapper/gradle-warpper.propertiesdistributionUrl 的 gradle 版本,比如是 3.3 ,然后去 ~/.gradle/warpper/dists/ 下删除对应版本的 gradle ,这里是 gradle-3.3-all
  3. 然后重启 Android Studio 让它重新同步即可

在 Mac 下使用 Android Studio 时常会遇到 Android Monitor 突然不打印日志的情况,目前知道的有三个方法:

  1. 重启 Android Studio

    这个不需要多说,点击 Android Studio 的 File => Invalidate caches / Restart ,选择 Just Restart

  2. 重启 adb

    命令行下输入:adb kill-server 关闭 adb,adb start-server 开启 adb 即可。

  3. 切换 adb 的 root/unroot 模式

    这个实际上还是重启了 adb 。 adb root 使 adb 默认进入 root 模式,adb unroot 使 adb 进入非 root 模式,切换模式会导致 adb 重启。

获取指定包名的 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)。如果你回来重读本文,重点放在第二部分。

阅读全文 »
0%