Solarex's Blog

我只想过,平平淡淡的生活,欲望啊,请放过脆弱的我

Checking Intent Availability

| Comments

Intents are probably Android’s most powerful tool. They tie together loosely coupled components and make it possible to start Activities that are not part of your own app. Using intents you can delegate to the Contacts app to select a contact or you can start the browser, share data and so on.

The receiving apps declare intent filters which describe the intents its component react to. If you know which intent filters the app provides and if the components are publicly available you can start any Activity of any app on the users device.

The problem is: How do you know if the app is installed – if you can use the Intent?

The solution is to create the Intent and check if it is available:

1
2
3
4
5
6
7
public static boolean isIntentAvailable(Context ctx, Intent intent) {
   final PackageManager mgr = ctx.getPackageManager();
   List<ResolveInfo> list =
      mgr.queryIntentActivities(intent,
         PackageManager.MATCH_DEFAULT_ONLY);
   return list.size() > 0;
}

And we can use it this way:

1
2
3
4
5
6
7
8
9
10
public boolean onPrepareOptionsMenu(Menu menu) {
    final boolean scanAvailable = isIntentAvailable(this,
        "com.google.zxing.client.android.SCAN");

    MenuItem item;
    item = menu.findItem(R.id.menu_item_add);
    item.setEnabled(scanAvailable);

    return super.onPrepareOptionsMenu(menu);
}

If you wanna check this before startActivity in case not caught by ActivityNotFoundException,here is another way:

1
2
3
4
5
if (intent.resolveActivity(ctx.getPackageManager()) != null) {
    ctx.startActivity(intent);
} else {
    log("No component can react to this intent = " + intent);
}

近阶段总结

| Comments

没有什么比漫无目的的徘徊更让人心烦意乱,消磨意志的了,最近就处于这样一种状态。Android开发基础已经基本上掌握了,但是高级点的技巧依然无从下手,一个Service如何长时间运行不被杀,流量监控后台运行的机制是什么都不了解。为什么无从下手,因为不知道优秀的应用是如何实现的,借鉴都不知道从哪抄。要打破这种状态,不仅仅需要巩固基础知识,更重要的是要学习高级技巧。

  • 巩固基础知识,Android开发基础知识总结,Android Guides,Android Training必须看完,做好笔记。Java基础知识巩固复习,设计模式学习总结,Android框架采用了许多设计模式,把Java基础知识打牢固才能更好的为下一步学习Android框架打好基础。 书籍/资料:Pro Android 4 / Java 编程思想 / Head First 设计模式 / 大话设计模式 / 设计模式视频

  • 借鉴优秀应用,Google原生应用,Android SDK Sample,优秀开源应用,学习这些优秀的开源应用如何处理后台Service,如何处理多线程,如何进行网络连接尽可能地少消耗流量。。。如果有时间,可以看下Google I/O开发者大会和Google Developer Blog来跟随大师脚步学习大师的开发技巧。

  • 工具的学习使用,总结开发工具使用技巧,Vim,Git,Source Insight,自动构建工具Ant,Maven,build.xml,pom.xml文件编写规则。调教好Vim插件,为以后学习框架时打log,看框架打好基础。学会高效使用Git,Github,利用Github Wiki来做笔记,作总结。 书籍/资料:Ant 视频 / Maven in action

  • 为学习框架和Android系统做准备,Linux系统编程,操作系统原理,Linux网络编程这些都要大致过一遍,不用太细致深入,有个概念就可以了。 书籍:Android内核剖析 / LKD / MOS / UNP / APUE / CSAPP

计划

  • 年前必须搞定基础知识复习总结。Android开发基础知识,Java基础知识总结。Android Guides/Android Training,Pro Android 4总结学习。Sundy教学视频。
  • 看Google 原生Settings应用。
  • 调教好Vim,Git。

Git配置(持续更新)

| Comments

git

用git大概有2年多了吧,不过大都停留在addcommitclonepush这些简单的操作上,最近看了git-scm网站的维护者,Pro.Git的作者的一个演讲,准备好好研究下git。以下是笔记,会不间断更新。

最基础的git config莫过于user.nameuser.email了吧。

1
2
git config --global user.name Solarex
git config --global user.email i@solarex.name

git commit的时候有时会发现在comment中需要换行,在命令行直接输入的话非常不方便,其实可以在自己喜欢的编辑器里面操作。

1
git config --global core.editor vim

这样git在执行commit操作时就会打开vim,就可以像编辑文本一样写comment了。

在打印git log的时候,如果有色彩区分会好看很多。

1
git config --global color.ui auto

看一些视频的时候,经常会看到他们输入一些非常短的命令就执行了相应的操作,其实,这些可以通过alias实现。

1
2
git config --global alias.st "status"
git config --global alias.ci "commit -a -v"

另外强烈推荐tig来查看git log,非常方便。Ubuntu下通过命令sudo apt-get install tig,Mac下通过brew install tig均可直接安装。

MacBook Pro 2011中安装Ubuntu 13.04

| Comments

ubuntu

之前已经在MacBook上装过Ubuntu了,不知怎么搞的,最近Ubuntu更新后,分辨率一直保持在1024×768,屏幕惨不忍睹,网上搜了好多,都是使用xrandr之类的,但是执行xrandr的时候老是报错,搜了下,貌似是一个bug。不管了,重装一下吧。

首先在MacBook下用Disk Utility分区,Ubuntu需要一个swap分区,一个/分区,用U盘安装的话有这两个就够了。但是我没有U盘,就又划分了一个2G的分区,把Ubuntu的镜像写进去,这样也便于以后恢复。分区全部使用FAT32格式。

分好区后就是写Ubuntu的镜像文件了,注意要从Ubuntu官方网站上面下载针对Mac特定版本的iso文件,下载下来后,校验下如果没错的话,就可以用UNetbooin来烧Ubuntu的镜像了,可以烧到U盘中也可以像我一样烧到一个专门的分区中。分区的编号可以通过命令diskutil list来查看。

使用Octopress和Github写博客

| Comments

Ubuntu下建立Octopress博客过程

Octopress

  • 首先安装git
1
sudo apt-get install git
  • 安装rvmruby 1.9.3
1
curl -L https://get.rvm.io | bash -s stable --ruby=1.9.3
  • 克隆octopress到本地
1
git clone git://github.com/imathis/octopress.git
  • 安装依赖
1
2
3
4
5
gem sources -a http://ruby.taobao.org/
gem sources -r http://rubygems.org/
gem sources -l #确保只有淘宝的ruby镜像
gem install bundle
bundle install #建议更改Gemfile第一行source为taobao镜像
  • 安装slash主题
1
2
git clone git://github.com/tommy351/Octopress-Theme-Slash.git .themes/slash
rake install['slash']

可以定制slash主题,由于众所周知的原因,我把博客的分享换成了国内的jiathis,评论系统换成了国内的多说,需要更改的地方也不是很多,就不详细叙述了,具体可以参考我的代码。当然你也可以使用其他的分享、评论系统,或者使用默认的也行。至于其他的第三方帐号,我只使用了Google Analytics,这个也很简单,就不赘述了。

  • 生成网站、预览
1
rake generate && rake preview

如果你没有改动Rakefile里的server_port的话,默认就可以在 http://localhost:4000/ 查看博客了。