Android 必知必会 - 使用 Intent 打开第三方应用及验证可用性
本文主要记录:
- 使用 Intent 打开第三方应用或指定 Activity 的三种方式
- 使用上面三种方式时分别如何判断该 Intent 能否被解析
- 判断该 Intent 能否被解析中可能出现的遗漏
本文主要记录:
关键词:GridView ListView EmptyView SwipeRefreshLayout
在使用 GridView、ListView 时经常需要处理无数据的情况,给用户一些必要的提示。而 GridView 和 ListView 可以使用 setEmptyView()
方法来设置无数据时展示的 View 。
本文讲一下 EmptyView 的基本用法以及如何配合 SwipeRefreshLayout 使用。
近期有网友根据 Android 必知必会 - DialogFragment 使用总结 做一些业务,但是目标却是用 DialogFragment 实现类似 PopupWindow 效果:
虽然在功能上 PopupWindow 更符合需要,但是使用 DialogFragment 代码更简洁、更方便封装功能模块。
关键词:Android7.0
、系统语言
、顺序不一致
获取系统当前语言是一个比较常用的功能,在 Android 7.0 系统上旧函数获取到的当前系统语言并不正确,或者说从 Android 7.0 起,Android 系统语言的规则变了。
最近使用 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 | Gradle sync failed: Cause: error in opening zip file |
今天升级 2.2 到 2.3 后打开一个项目提示升级 gradle,就同意了,结果报了上面的错误。
大概原因应该是下载的最新的 gradle 包有问题,新升级后配置的代理失效了。
操作如下:
.gradle/
整个项目gradle/wrapper/gradle-warpper.properties
的 distributionUrl
的 gradle 版本,比如是 3.3 ,然后去 ~/.gradle/warpper/dists/
下删除对应版本的 gradle ,这里是 gradle-3.3-all
在 Mac 下使用 Android Studio 时常会遇到 Android Monitor 突然不打印日志的情况,目前知道的有三个方法:
重启 Android Studio
这个不需要多说,点击 Android Studio 的 File => Invalidate caches / Restart ,选择 Just Restart
重启 adb
命令行下输入:adb kill-server
关闭 adb,adb start-server
开启 adb 即可。
切换 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)。如果你回来重读本文,重点放在第二部分。