2012年12月19日水曜日

Facebook graph Apiで写真URLつき投稿

Facebookへの写真URLつき投稿。
自分のFeedに流れるやつです。

 写真をクリックすると写真が貼ってある外部ページに飛びます。
 link要素を付与するとシェア扱い。
pictureを無効にすると普通のFeedに。 
この内容だと写真が外部にあるものになりますが、Facebook上のアルバムにUPするためには別途画像データをバイナリで渡す必要があります。

			Builder urlBuilder = new Builder();
			urlBuilder.scheme("https");
			urlBuilder.authority("graph.facebook.com");
			urlBuilder.path("/me/feed");
			urlBuilder.appendQueryParameter("format", "json");
			urlBuilder.appendQueryParameter("method", "POST");
			urlBuilder.appendQueryParameter("message", message);
			urlBuilder.appendQueryParameter("link", params.url);
			urlBuilder.appendQueryParameter("picture", imageUrl);
			urlBuilder.appendQueryParameter("access_token", facebookToken);
			String url = urlBuilder.toString();
			String contents = getContentsByGet(url);

getContentsByGet部分は省略しました。内容はHttpClientでPostしているだけです。

Android4.0でタッチフォーカス(マニュアルフォーカス)実装

Androidのカメラアプリでのオートフォーカス実装は何度もやったけど マニュアルフォーカス(MF)は未経験でした。
デフォルトカメラアプリには往々にしてMFがありますが マーケットアプリにはほとんどない現状。
カメラアプリを貪っていると唯一lgcameraが実装してました(他にもいっぱいあると思うんですが見つけられなかった。。。)

でも2.XシリーズだとMFが動かずICSだとMFが効く。
ということはネイティブでMFやるにはICSが必要ということか。
勉強不足を実感しました。。。

調べたところCAMERAクラスのsetFocusAreasを利用することでcamera#autofocusのfocusのエリアを変えられる模様。

touchイベントからとったview座標をプレビューの座標に変換。

座標をRectに変換。
weight(よく分からないけど1000で良い感じになった)と一緒にList<Camera.Area>型でCamera.ParametersのsetFocusAreasに渡してやればフォーカスエリアの変更完了。

Viewには何の変化もないけど、同じタイミングでautofocus(null)を呼んであげると
フォーカスエリアが変化していることが分かり易いはず。

ただし、端末のカメラが対応していないと落ちるので
Camera#getParameters().getMaxNumFocusAreas()>0
のときだけ使うようにしましょう。

ちなみに同じ方法で測光を行うsetMeteringAreasも使えます。