存档

文章标签 ‘Android’

在Android应用中调用RESTful服务

2012年5月14日 没有评论

REST是一个被广泛采用的架构模式,尤其在API、Web Services、云计算流行的大环境下,所有主流的互联网厂商都提供了其服务的REST接口,用户可采用JSON、XML格式使用HTTP进行方法调用和数据传输。

RESTful已成为主流客户-服务器编程模式,在手机端与后端系统的交互中也被普遍采用。

现在我们就来分析下Android环境下的RESTful编程模式和一般方法。

错误的实现方式

这个做法会导致:

  • 操作系统shutdown这个进程;
  • 数据不能持久化保存。

而正确处理REST方法通常有三种设计模式:

  • 使用 Service API
  • 使用 ContentProvider API
  • 使用 ContentProvider API 和 SyncAdapter

其中,Service Helper的作用是:

以单体(Singleton)的方式暴露一个简单的异步API给用户接口使用。

• 准备和发送服务请求

– 检测方法是否已经被挂起

– 创建请求意图

– 添加操作类型和一个唯一的请求id号

– 添加方法的特殊属性值

– 添加binder回调

– 调用startService(意图)

– 返回请求id号

• 处理从服务返回的回调

– 将回调分发给用户接口监听器

实战一下:

An attempt at implementing a RESTful Android application 开始RESTful Android应用的尝试

git clone https://github.com/jeremyhaberman/restful-android.git

在 eclipse > file > import >  Existing Projects into Workspace

Debug As Android Application,这里使用了Simple OAuth library for Java第三方库

如通过Twitter API使用OAuth验证

import com.jeremyhaberman.restfulandroid.rest.Request;

// RESTful Android Twitter app settings

private static final String TWITTER_API_KEY = “ssdfiwKoedslVjUsngtow”;

private static final String TWITTER_API_SECRET = “sdfsIkkmIKLFDvzaLdnBeLAVkwPFUxxZ9Ulf8fkY”;

private static final String TWITTER_CALLBACK_URL = “restful-android://callback”;

总结:

  • 不要在Activities里实现REST方法;
  • 从一个服务中启动长时间运行的操作;
  • 持久要早、要经常(Persist early & persist often)
  • 最大限度的减少网络使用(Minimize the network usage);
  • 是不是在关键时刻使用同步适配器执行后台操作(Use a sync adapter to execute background operations which are not time critical),使用Android Cloud to Device Messaging。

参考:

分类: Java, Mobile & Embedded 标签: ,

【Android】制作appwidget桌面相册幻灯片

2012年5月2日 没有评论

最近在学习android的appwidget,看了一些文章,决定做一个相册幻灯片来练手,下面写写过程来给大家共享:

  1. 在项目的res/xml/下建立一个appwidget_info.xml文件,内容如下:
    <?xml version=”1.0″ encoding=”utf-8″?>
    <appwidget-provider xmlns:android=”http://schemas.android.com/apk/res/android”
    android:initialLayout
    =”@layout/appwidget”
    android:minHeight
    =”800dp”
    android:minWidth
    =”240dp”
    android:updatePeriodMillis
    =”300000″ >

    </appwidget-provider>

    在这里定义appwidget的基本信息,宽度,高度,以及刷新的频率等

  2. 在layout/下建立appwidget的layout文件
    <?xml version=”1.0″ encoding=”utf-8″?>
    <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
    android:layout_width
    =”match_parent”
    android:layout_height
    =”match_parent”
    android:gravity
    =”center”
    android:orientation
    =”vertical”
    android:padding
    =”20dp” >

    <Button
    android:id=”@+id/button1″
    android:layout_width
    =”120dp”
    android:layout_height
    =”wrap_content”
    android:layout_gravity
    =”center_horizontal”
    android:text
    =”播放图片” />

    <ImageView
    android:id=”@+id/imageView1″
    android:layout_width
    =”fill_parent”
    android:layout_height
    =”fill_parent”
    android:background
    =”#FFFF”
    android:padding
    =”2dp”
    android:scaleType
    =”fitXY”
    android:src
    =”@drawable/p1″ />

    </LinearLayout>

    这个layout比较简单,里面仅仅包含一个button和一个imageview,设置 android:padding=”2dp”来让图片有一个简单的边框样式

  3. 建立MyAppWidgetProvider继承AppWidgetProvider,重写父类的生命周期函数,这里的原理google一下有很多,就不多写了。首先重写onUpdate,这个方法在appwidget第一次加载时会被调用,在这里我们主要使用ContentResolver查询出本机所有图片;接下来新建一个PendingIntent将图片路径的集合封装到其中,最后将pendingIntent设置给button
    Intent intent = new Intent(“com.jaredluo.appwidget.change”);
    intent.putExtra(
    “path”, pathStrArr);for (int j = 0; j < appWidgetIds.length; j++由于appwidget与主程序处于不同的进程中,所以通讯都需要依靠PendingIntent。

    ) {
    //RemoteView是appwidget中很重要的一个类,基本上对appwidget中
    //所有控件的操作都要基于RemoteView来操作

    RemoteViews remoteView
    = new RemoteViews(context.getPackageName(),
    R.layout.appwidget);
    remoteView.setOnClickPendingIntent(R.id.button1, pIntent);
    appWidgetManager.updateAppWidget(appWidgetIds[j], remoteView);
    remoteView
    = null;
    }

    //设置pending,发送广播,注意设置
    //PendingIntent.FLAG_UPDATE_CURRENT
    //否则onRecieve函数中接收不到intent中的数据
    PendingIntent pIntent = PendingIntent.getBroadcast(context, 0

    , intent,PendingIntent.FLAG_UPDATE_CURRENT);
  4. 接下来在onReceive中接收我们刚才设置给button的广播,首先新开一个线程控制图片的播放,接下来在Handler中为ImageView设置图片源
    final RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.appwidget);
    String path
    = paths[msg.getData().getInt(“i”)];
    remoteViews.setImageViewBitmap(R.id.imageView1,BitmapUtil.getBitmap(path,
    200, 200));
    appWidgetManager.updateAppWidget(componentName,remoteViews);

    这里需要注意一个问题,我在把图片设置给appwidget时,跑不了几张图片就会出现!!! FAILED BINDER TRANSACTION !!!这个错误,最先以为是图片太大造成的,结果压缩图片也无果;后面在网上搜索一番发现:Binder data size limit is 512K 由于传输图片到appwidget进程中的Binder最大数据量是512k,并且RemoteView也不会每次清理,所以如果每次都使用同一个RemoteView进行传输会因为溢出而报错。最后每次都新建一个RemoteView问题才解决掉。

看看最后的效果,点击播放图片按钮,图片就开始更替:

代码还有很多问题和不完善,接下来有空会继续修改。

分类: Java, Mobile & Embedded 标签:

Best Android Apps

2011年5月29日 4 条评论

一份整理非常全面的 Android 最佳应用幻灯片,有超过 200 多页的内容。

山寨 Android 出现深圳

2009年8月18日 没有评论

来自瘾科技中国版的独家线报, 山寨Android终于在深圳问世了, 深圳速度再一次得以体现, 让我想到了疯狂的华强北。

产品参数:

  • 处理器SAMSUNG S3C2448 400MHz
  • ROM和RAM都是128MB
  • 支持TF卡扩展
  • 200万的CMOS摄像头,最高可拍摄1600×1200的静态照片
  • 2.8寸的240×320触摸屏,6万5千色
  • 1200mAh电池
  • 首批是G网机型

产品现在已经开始量产, 不过首批是外销到其它国家.

这款机子价格还未知, 不过可以肯定应该会在2000RMB以下.

更多信息请访问: 瘾科技中国版

分类: Mobile & Embedded 标签: ,

InfoQ 架构师 (8月刊)

2009年8月14日 没有评论

InfoQ中文站的电子杂志《架构师》(8月刊) 主编由Ruby社区的首席编辑李明担任,此外,本期《架构师》还增加了一个名为“架构师大家谈”版块。

人物专访

  • Simon探讨编程语言与研究工作

热点新闻

  • 开发减速,是为了赢利提速
  • Sun股东同意Oracle的收购
  • 综述:Scala是Java未来的后继者
  • “服务重用”是否被过度使用?
  • 使用LESS或Sass重构CSS代码
  • Ruby on Rails项目的救赎
  • 各方未就HTML 5 Video Codec达成一致
  • 微软向Linux Kernel贡献两万行代码
  • Google开发全新操作系统Google Chrome OS,直接挑战微软核心业务
  • 微软的浏览器操作系统:Gazelle
  • 4 个Office应用将会推出在线版:Word、Excel、PowerPoint和OneNote
  • 中国人寿构建国内首个Silverlight企业级应用

推荐文章

  • J2EE应用下基于AOP的抓取策略实现
  • RGen:Ruby建模和代码生成的框架
  • 面向服务的经济学
  • 云计算的虚拟研讨会
  • backlog是一种关键的产物和实践,还是一种浪费?
  • 反对if行动/反对for行动

新品推荐

  • JUnit 4.7的新特性:Rule
  • Rails 2.3.3发布、Rails 3.0与Merb现状
  • Oracle和BEA完成产品集成,融合中间件 11g发布
  • FlexMonkey 1.0发布了
  • Android开始支持脚本语言Python、Lua及Beanshell,未来还将支持Ruby
  • Oracle Coherence 3.5带来增强的WebLogic支持和万亿级数据网格
  • 微软发布了分布式计算技术Dryad和DryadLINQ的学术版
  • PowerShell 2.0 RTM即将发布

架构师大家谈:架构师修炼之道

下载本月刊

Google Android: Google 移动新战略

2007年11月18日 没有评论

由 Google 牵头,携手国际上多家领先的移动服务提供商(包括中国移动通信、日本的DoCoMo) 共同组建开放手机联盟, 并推出 Android 综合移动设备平台。这是一个基于 Linux 的移动应用创新平台。同时也推出 Android SDK 软件开发工具包,开发者们可以利用 SDK 工具包开发基于 Android 平台的新应用。Google也正式宣布举办总奖金为 1000 万美元的 Android 开发者大赛,邀请开发者们为 Android 平台开发移动应用。

Google 已将战线延伸至无线移动终端,可以预见这将是 Google 广告收入新的增长点。

有关 Google Android 架构介绍的视频信息:

分类: Google 标签: ,