Hack31 Android面向切面编程
问题:Android如何使用切面编程?
解决方案:面向切面编程是一种编程范式,通过分离横切关注点提高程序的模块化和组件化。其基本原理是:将横切关注点抽离到一个单独的切面中,同时将需要执行的业务逻辑代码放在单独或者不同模块中。
在Android中可以使用 AspectJ 这个库来实现切面编程。在gradle文件中使用 classpath ‘com.uphyca.gradle:gradle-android-aspectj-plugin:0.9.14’ 构建AspectJ支持。描述切面的代码如下:
1 |
|
Hack32 使用Cocos2d-x美化应用程序
问题:Android如何使用Cocos2d-x展示动画?
解决方案:开发者可以使用Android NDK,导入 org.cocos2dx.lib 后调用C++代码处理动画效果。
Hack33 在Android上运行Objective-C
问题:Android如何运行Objective-C?
解决方案:Itoa 是一组托管于Github的开源项目,该项目实现了编译器、构建脚本和各种库,用于将Objective-C源代码构建为Android APK文件。
Hack34 在Android上运行Scala
问题:Android如何运行Scala?
解决方案:开发者可以使用 Simple Build Tool 这个开源的Scala构建工具处理Android项目中的Scala代码。
Hack35 同时发起多个Intent
问题:用户发布图片时,拍照或选择图片两种Intent如何合并?
解决方案:Intent.createChooser() 和 putExtra() 方法可以合并多个Intent。核心代码如下:
1 | Intent pickIntent = new Intent(Intent.ACTION_GET_CONTENT); |
Hack36 在用户反馈中收集信息
问题:如何获取到用户的设备信息?
解决方案:关注用户反馈是确保应用程序成功的有效方式之一。如果用户需要发送反馈邮件,最好的处理方式是在反馈邮件中附加用户的设备信息。这意味着,从用户中获取一些重要的详细信息变得比较简单了。开发者需要创建 EnvironmentInfoUtil 工具类来收集用户设备信息,并将其添加到Email的 EXTRA_TEXT 并发送。
Hack37 向media ContentProvider添加MP3文件
问题:添加媒体文件后,如何通知ContentProvider?
解决方案:添加媒体文件成功后,通过 sendBroadcast() 方法发送广播。
Hack38 为ActionBar添加刷新动作
问题:ActionBar如何使用?
解决方案:在Android 3.0之后,Google对UI导航设计上进行了一系列的改革,其中有一个非常好用的新功能就是引入的 ActionBar,它用于取代3.0之前的标题栏,并提供更为丰富的导航效果。
重写 onCreateOptionsMenu() 和 onOptionsItemSelected() 方法,设置ActionBar的显示效果与点击事件。
Hack39 从Market中获取依赖功能
问题:如何完成在当前程序中打开其他应用程序(如果设备上没有该应用则跳转到应用商店下载)的需求?
解决方案:开发者首先应根据 程序包名 判断该应用是否安装在设备中,如果已经安装则通过Intent打开即可。反之,则通过 AlertDialog 打开Market。
Hack40 以后进先出方式加载图片
问题:默认情况下,列表是没有选择行为的。如何设置列表的选择模式?
解决方案:AsyncTask并不适合处理大量图片,也不会让开发者控制任务的优先级。作为替代方案,我们使用 java.util.concurrent 包中的执行器服务和一个优先级队列来指定请求图片的顺序。
从开发者的角度来说,每次加载大量图片并不是一个非常合理的行为,UI很有可能不会灵敏响应。从用户的角度来说,大量图片的加载体验也很一般。通用的设计方式是,大量图片分页加载,为图片列表提供下拉刷新和上划加载更多功能。