2011年1月27日木曜日

Google Bookmarks API 。。。は無いらしい


Google Bookmarksが便利だし、履歴も含めたアプリ作れないものかと思って少し調べてみた。
結論としては、公式にはAPIはない模様。。。

ただし。XML形式でデータは取れる。

https://www.google.com/bookmarks/lookup?start=25&output=xml
lookup → リストを取得の意

https://www.google.com/bookmarks/find?q=maps.google.com&start=25&output=xml
find → 検索の意
q=maps.google.com → キーワード"maps.google,com"で検索
start=25 → 25個目から取得
utput=xml → XML形式で取得


本当に欲しかったのは履歴なので、それは後日調べることにする。

以下追記
履歴は
https://www.google.com/history/find?output=rss&st=maps&q=
で、RSS形式でデータが取れる模様。
BookmarkもRSS形式で取得可能だった。
st=maps → google mapsのデータを取得している。
st部分を変更すれば、他の種類のデータが取れそう。
ただ、wgetは出来なそう。
ここを見たけど、ブラウザのCookieをりようすれば可能との事。

2011年1月18日火曜日

Google Bookmarksを共有


最近知ったんだけど、
Google Bookmarksを旅行での写真や動画を共有するのにちょうどいい。

写真→picasaへアップロード
動画→youtubeとかほかの動画サイトへアップ

で、ばらばらなものを一つにまとめる。
かつ、プライバシーの観点から閲覧を許可制にする。
これのためのGoogle Bookmarks
https://www.google.com/bookmarks/l
にアクセスすと英語表記のページになる。(最後の「l」が大事)
label等で分けたりしたBookmarkにチェックをつけて、
Copy to listを選択して、リスト作成したり、すでにあるリストに追加したり。

作ったリストは、左上の「My lists」から見られる。
リストを共有したい場合は、リストを表示した状態で、
Shareを選択すると表示されるポップアップで、
「People with access」タブの「Invite people」に
見せても良い人のGmailのアドレスを打ち込んでinviteでOK。

visibilityはprivateにするのをお忘れなく。

結構便利。

2011年1月5日水曜日

android build on 32bit (froyo/gingerbread)


froyo(2.2)から、Androidのソースをbuildしようとしても
64bitじゃないからムリー。みたいな事をいわれてビルドできなかった。
しばらく放置してたけど、もう一度調べてみたら、
出来たのでメモをとっておく。

1)
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo
もしくは、
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b gingerbread
でソースコード取得。

2)
$ repo sync

3)
64bitの記述があるところを修正
32-bit support in froyo/2.2を参考にすればいける。

./build/core/main.mk
の以下のように編集
ifeq ($(BUILD_OS),linux)
build_arch := $(shell uname -m)
-ifneq (64,$(findstring 64,$(build_arch))) ←コメントアウトしたり削除したり
+ifneq (i686,$(findstring i686,$(build_arch))) ←追加するコード
$(warning ************************************************************)
$(warning You are attempting to build on a 32-bit system.)

4)
以下の4つの中に
./external/clearsilver/cgi/Android.mk
./external/clearsilver/java-jni/Android.mk
./external/clearsilver/util/Android.mk
./external/clearsilver/cs/Android.mk

LOCAL_CFLAGS += -m64
LOCAL_LDFLAGS += -m64
という記述があるので、コメントアウトするか
LOCAL_CFLAGS += -m32
LOCAL_LDFLAGS += -m32
のように32bitに書き換える。

5)
$ make -j2
で、コンパイル開始。
コアの数や作業状況によっては、-j4としたほうがコンパイルは早くなる。


手順4)を抜かしてみたけど自分の環境では、
64bit用のヘッダーがないよー。みたいなエラーが出たので、
ダメみたいです。

最後は、以下を実行すればemulatorが立ち上がる。
./out/host/linux-x86/bin/emulator -kernel ./prebuilt/android-arm/kernel/kernel-qemu -system ./out/target/product/generic -ramdisk ./out/target/product/generic/ramdisk.img -data ./out/target/product/generic/userdata.img -skindir ./sdk/emulator/skins/ -skin HVGA


froyoでもgingerbreadでも同じ手順でbuild出来ました。

2011年1月3日月曜日

WebViewで画像を表示



リモートの画像を読み込む方法として、
ImageViewを使うよりもWebViewを使うほうが良いのではないかと思ったので、
サンプルソースを書いてみた。
WebViewImageLoad01.tar.gz


AsyncTaskを利用して、バックグラウンドで
mClient = new DefaultHttpClient();
mGetMethod = new HttpGet();
mGetMethod.setURI(new URI(uri));
HttpResponse resp = mClient.execute(mGetMethod);
InputStream is = resp.getEntity().getContent();
Bitmap bit = createBitmap(is);
のようにする手もあるが、
uriに指定された画像が、大きすぎてメモリ不足になったりしたときに落ちる。。。
WebViewを利用しておけば、この点はWebkitのほうで何とかしてくれる?とか
思ったので、とりあえずやってみた。
でも、画像が読み込めなかったときに、標準ブラウザの「?」が表示されちゃうから
やっぱり無しかな。。。

loadImageは、画像をhttpで取得して表示
loadImage2は、トリミングして表示
loadImageFromSDは、sdcardから取得した画像を表示
loadImageFromSD2は、トリミングして表示
トリミング自体は、CSSで記述しています。

表示してみるとわかるが、
setBackgroundColor(Color.parseColor("#00000000"))を利用することで
WebViewの背景を透明にできる。さらにlayoutのファイルで
backgroundを指定するれば、色つきの透過とか色々できる模様

上がloadImageで、下がloadImage2。
ちなみに上記スクリーンショットは
eclair-x86で、ubuntuでつくったイメージをWindowsのVMplayerで実行しているところ。

もとの画像は以下のもの。(ちなみに戸田恵梨香さん。勝手に使っているけど平気かな。。。)



CustomWebViewClientは、シーケンスを見るためにWebViewClientを拡張しただけです。
package com.matsuhiro.android.webimageload01;

import java.io.File;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Environment;
import android.webkit.WebView;

public class WebImageload01 extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        WebView web1 = (WebView) findViewById(R.id.web1);
        loadImage(web1, "http://img.article.pchome.net/00/26/58/73/pic_lib/wm/Toda_Erika1063.jpg");
        
        WebView web2 = (WebView) findViewById(R.id.web2);
        loadImage2(web2, "http://img.article.pchome.net/00/26/58/73/pic_lib/wm/Toda_Erika1063.jpg");
        
        WebView web3 = (WebView) findViewById(R.id.web3);
        loadImageFromSD(web3, "DCIM/100MEDIA/IMAG0077.jpg");
        
        WebView web4 = (WebView) findViewById(R.id.web4);
        loadImageFromSD2(web4, "DCIM/100MEDIA/IMAG0077.jpg");
        
    }
    
    private void loadImage(final WebView webview, final String image_uri) {
     final String html_src = "<html><head><style type=\"text/css\">body { margin: 0px; background: transparent; background-color: transparent;}</style></head><body><img src=\""+image_uri+"\" width=\"210\" height=\"210\"/></body></html>";
     webview.setBackgroundColor(Color.parseColor("#00000000"));
     new Thread() {
      @Override
      public void run() {
       CustomWebViewClient clieant = new CustomWebViewClient();
       webview.setWebViewClient(clieant);
          webview.loadData(html_src, "text/html", "UTF-8");
      }
     }.start();
    }
    
    private void loadImage2(final WebView webview, final String image_uri) {
     final String html_src = "<html><head><style type=\"text/css\">body { margin: 0px; background: transparent; background-color: transparent;}p.thumb a{ display:block; float:left; width:210px; height:210px; line-height:210px; overflow:hidden; position:relative; z-index:1}p.thumb a img{ float:left; position:absolute; top:0px; left:-32px;} </style></head><body><p class=\"thumb\"><a href=\"#\"><img src=\""+image_uri+"\" width=\"280\" height=\"210\"/></a></p></body></html>";
     webview.setBackgroundColor(Color.parseColor("#00000000"));
     new Thread() {
      @Override
      public void run() {
       CustomWebViewClient clieant = new CustomWebViewClient();
       webview.setWebViewClient(clieant);
          webview.loadData(html_src, "text/html", "UTF-8");
      }
     }.start();
    }
    
    private void loadImageFromSD(final WebView webview, String file_name) {
     final String html_src = "<html><head><style type=\"text/css\">body { margin: 0px; background: transparent; background-color: transparent;} </style></head><body><img src=\""+file_name+"\" width=\"210\" height=\"210\"/></body></html>";
     webview.setBackgroundColor(Color.parseColor("#00000000"));
     final File directory = Environment.getExternalStorageDirectory();
     new Thread() {
      @Override
      public void run() {
       CustomWebViewClient clieant = new CustomWebViewClient();
       webview.setWebViewClient(clieant);
       webview.loadDataWithBaseURL("file://"+directory.getAbsolutePath()+"/", html_src, "text/html", "UTF-8", "");
      }
     }.start();
    }
    
    private void loadImageFromSD2(final WebView webview, String file_name) {
     final String html_src = "<html><head><style type=\"text/css\">body { margin: 0px; background: transparent; background-color: transparent;}p.thumb a{ display:block; float:left; width:210px; height:210px; line-height:210px; overflow:hidden; position:relative; z-index:1}p.thumb a img{ float:left; position:absolute; top:-60px; left:0px;} </style></head><body><p class=\"thumb\"><a href=\"#\"><img src=\""+file_name+"\" width=\"210\" height=\"351\"/></a></p></body></html>";
     webview.setBackgroundColor(Color.parseColor("#00000000"));
     final File directory = Environment.getExternalStorageDirectory();
     new Thread() {
      @Override
      public void run() {
       CustomWebViewClient clieant = new CustomWebViewClient();
       webview.setWebViewClient(clieant);
          webview.loadDataWithBaseURL("file://"+directory.getAbsolutePath()+"/", html_src, "text/html", "UTF-8", "");
      }
     }.start();
    }
    
}



レイアウトは以下のような感じ。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <ScrollView  
    android:id="@+id/ScrollView"  
    android:layout_height="fill_parent"  
    android:layout_width="fill_parent">
    <LinearLayout
   android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent" 
  android:background="@drawable/icon">
   <TextView  
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:text="@string/hello"/>
      <WebView android:id="@+id/web1"
       android:layout_width="300dp" 
       android:layout_height="300dp"
       android:background="#2A0000FF" />
      <WebView android:id="@+id/web2"
       android:layout_width="300dp" 
       android:layout_height="300dp"
       android:focusable="false" 
       android:background="#2A00FFFF"/>
      <WebView android:id="@+id/web3"
       android:layout_width="300dp" 
       android:layout_height="300dp"
       android:background="#2AFF00FF" />
      <WebView android:id="@+id/web4"
       android:layout_width="300dp" 
       android:layout_height="300dp"
       android:focusable="false"
       android:background="#2A00FF00" />
  </LinearLayout>
    </ScrollView>
</LinearLayout>