2011年10月13日木曜日

List of libraries for android

[覚書] Android用各種ライブラリ一覧
  • Back
    • Twitter4J 
      • A Java library for the Twitter API
    • Android ROME Feed Reader
      • ROME is an open source Java tool for parsing, generating, and publishing RSS and Atom feeds. Android ROME Feed Reader is a repackaging of ROME so that it works on Android devices.
    • Spring Android
      • A Rest Client for Android
      • Auth support for accessing secure APIs
  • Graph
    • AChartEngine
      • AChartEngine is a charting library for Android applications. It currently supports the following chart types:
        • line chart / area chart / scatter chart / time chart / bar chart / pie chart / bubble chart / doughnut chart / range (high-low) bar chart / dial chart / gauge / combined (any combination of line, cubic line, scatter, bar, range bar, bubble) chart / cubic line chart
    • AndroidPlot
      • AndroidPlot is a pure Java API for creating dynamic and static charts within your Android application. AndroidPlot currently supports the following types of charts:
        • Line charts / Scatter charts / Bar charts / Step charts
    • ChartDroid
      • ChartDroid is an Intent-based "library application" for static chart and graph generation on Android. It can graph/plot/display numerical data in many representations.
  • Game
    • AndEngine
      • Free Android 2D OpenGL Game Engine
    • libgdx
      • Android/desktop game development framework



2011年9月28日水曜日

Android からApp EngineのフォームにPOSTする

「Google アカウントを使用して Google App Engine の認証を行う」の続きです。

Google App Engine のスタートガイドで作成しているゲストブックのフォームにポストするサンプルです。



以前のソースはActivityクラスにコードを記載してましたが、もう少し汎用的なクラスを作成しました。

GoogleServiceAuthenticator


  • コンストラクタにはContextを指定してます。
  • getGoogleAccounts() で、アカウントリストを取得できます。
  • execute()で、認証を実行してます。
    • 引数 accountには、リストから選ばられた一意のアカウントを指定します。typeは、Googleのアカウントタイプ(AppEngineの場合は"ah")。postExecuteCallbackには、認証終了後にコールしたいクラスを指定します。
    • AccountManagerのgetAuthTokenを呼び出します。
      • GetAuthTokenCallbackをcallbackに指定してます。
      • GetAuthTokenCallbackのrun()の認証処理の実態のgetAuthToken()を呼び出してます。
    • getAuthToken()では、認証処理を失敗時のリトライのためにループさせてます。
      • getLoginUrl()を呼び出して、アプリのUrlを作成。
        • https://yourappl.appspot.com/_ah/login?continue=http://localhost/&auth=[authToken]
        • authTokenは、AccountManagerから取得した文字列を指定してます。
      • urlを読んで、レスポンスを取得。
      • 取得したレスポンスが500の場合、AccountManagerのキャッシュからauthTokenを削除して、リトライをさせてます。
      • 認証に成功したら、Cookieから、ASCID または、SACSIDを取得します。
        • httpsで認証した場合は、SACSID、httpの場合は、ASCIDが取得できます。
    • その後、postExecuteCallbackを実行させてます。
      • postExecuteCallback内で、App Engineにアクセスするときに、Http Headerの CookieにASCID/SACSIDをセットする必要があります。


Activityの実装例

GoogleServiceAuthExampleActivity


フルプロジェクトはgithubに上げました。
http://github.com/granoeste/GoogleServiceAuthExample

Google アカウントを使用して Google App Engine の認証を行う

AccountManager から、端末に登録されているGoogleアカウントを取得して、
そのアカウントでGoogle App Engineの認証を行う簡単なサンプルです。


AndroidManifest.xmlは、次のパーミッションを指定します。

  • android.permission.GET_ACCOUNTS
  • android.permission.MANAGE_ACCOUNTS
  • android.permission.USE_CREDENTIALS




Activity


AccountManagerから、AccountsByTypeに"com.google"を指定して、Googleアカウントの一覧を取得します。
それをリスト表示してます。
※リストは簡易的に標準のレイアウトを使用してます。

public class AccountList extends ListActivity { protected AccountManager accountManager; protected Intent intent; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); accountManager = AccountManager.get(getApplicationContext()); Account[] accounts = accountManager.getAccountsByType("com.google"); this.setListAdapter(new ArrayAdapter( this, android.R.layout.simple_list_item_1, accounts)); } @Override protected void onListItemClick(ListView l, View v, int position, long id) { Account account = (Account)getListView().getItemAtPosition(position); AccountManagerFuture accountManagerFuture = accountManager.getAuthToken(account, "ah", null, this, null, null); Bundle authTokenBundle; try { authTokenBundle = accountManagerFuture.getResult(); String authToken = authTokenBundle.get( AccountManager.KEY_AUTHTOKEN).toString(); Log.i(TAG,"authToken:"+authToken); } catch (OperationCanceledException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (AuthenticatorException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
リストで選んだAccountでGoogle App Engineの認証を行ってます。
AccountManager#getAuthToken() の 第2引数に AuthTokenTypeを指定します。
"ah"がGoogle App EngineのAuthTokenTypeとなってます。

AuthTokenTypeについては、次のサイトが参考になると思います。
  Account Managerについて - adsaria mood
  Google Data APIs Frequently Asked Questions - Google Base Data API - Google Code

認証画面が表示されます。

ユーザがAllowを選択するとauthTokenを取得することができます。


2011年9月19日月曜日

外部メディア (SDカード) へのインストール不可にする


Android 2.2.x (Froyo) から、アプリケーションは内蔵ストレージ(携帯端末)だけでなく、外部メディア(SDカード) にインストールさせることが可能になってます。

端末によっては、内蔵ストレージは、通常数百MBとサイズが小さく、プリインストールのアプリケーションなどで、ユーザが使用できるサイズ100MB以下の場合があります。
その場合、ゲームなどサイズの大きいアプリケーションは、2GB-32GBとサイズの大きい外部メディアにインストールさせることで、内蔵ストレージの消費を抑えることができます。

しかし、常に常駐するタイプのものや、ホームに配置するウィジェットの場合、外部メディアにインストールされてしまうと問題が発生します。

外部メディアは、端末から取り外したり、USBでパソコンと接続した場合にアンマウントされてしまいます。アンマウントされてしまうと、端末から外部メディアが認識できなくなり、その上で動作していたアプリケーションも停止することなります。

この問題を防ぐために、アプリケーションの開発時に外部メディアに移動できないように設定することが可能です。


AndroidManifest.xmlの<manifest>タグに、android:installLocation属性を定義します。
"internalOnly"と定義することで、外部メディアへの移動が出来なくなります。

android:installLocation属性の詳細はDev Guideを参照してください。
<manifest> | Android Developers

android:installLocation属性には、他に"auto"と"preferExternal"が設定することが可能です。
auto - アプリケーションは、外部ストレージにインストールすることができますが、システムはデフォルトで内部ストレージにアプリケーションをインストールします。内部ストレージがいっぱいになっている場合、システムは外部ストレージにインストールします。
preferExternal - アプリケーションは、外部ストレージ(SDカード)にインストールされることを優先します。


Android 2.1.x (Eclar) までは、外部メディアへのインストールができないため、android:installLocation属性はありませんので、通常のインストール先は内蔵ストレージとなります。
Android 2.2.x (Froyo)でも、android:installLocation属性を設定していない場合、通常のインストール先は内蔵ストレージとなります。

通常の端末の状態では、問題はありませんが、アプリケーションの通常のインストール先を内蔵ストレージから外部ストレージに変更することが出来てしまいます。

USB接続して、次のコマンドを実行します。

adb shell pm setInstallLocation 2
コマンドを実行することで、アプリケーションの通常のインストール先を外部メディアに変更します。

このような場合、android:installLocation属性に"internalOnly"を指定してない場合、外部メディアにインストールされてしまうことになります。
ウィジェットの場合、外部メディアにインストールされると、ホーム画面でウィジェットの一覧に表示されなくなります。


なので、
ウィジェットや常駐アプリは android:installLocation属性に "internalOnly" を指定しましょう!!

Android 2.1 以下を対象とするアプリケーションの場合、プロジェクトのビルドターゲットにAndroid 2.2 以上を指定して、AndroidManifest.xmlにuses-sdkタグでターゲットバージョンを指定します。

2011年8月22日月曜日

[AndroidFace Ver.1.3.2] リリース

[AndroidFace Lite Ver.1.3.2] をリリースしました。
* 通知(ステータスバー)にバッテリーの数値を表示する機能の追加
* 電波強度の強弱の閾値の変更値の修正


[AndroidFace Lite Ver.1.3.1] もリリースしてました。
* au CDMA2000(EVO)対応
* 動作条件 2.1 に引き上げ
* 電波強度をウィジェットに表示するオプションを追加
* 電波強度の強弱の閾値を変更できる機能を追加
* 機能のリファイン
* いくつかのバグ修正

2011年8月7日日曜日

日本の伝統色 (ライブ壁紙) リリース

日本の伝統色 (ライブ壁紙) リリースしました。

伝統的な日本の色 のライブ壁紙
30分ごとか画面操作時に、ランダムで壁紙の色が変わります。

色の種類は、500色近くあります。
通常のアプリとして起動することもできます。
画面をタッチすることで、次の色に変えることもできます。
また、メニューから一覧をすることも可能です。


マーケットリンク
http://t.co/oQ3yQsb

BurgerTimer リリース

ちょっと変わったキッチンタイマーアプリです。
ちょっとファジーなのはご愛嬌。

1) タイマー設定画面で、針をまわしてタイマーを設定します。
2) スタートすると、設定した時間で、ハンバーガーが作成されていきます。
 途中、変な具材が混ざることがあります。そのときは、端末を振ると捨てることができます。
3) 時間になるとハンバーガーが完成し、アラームが鳴ります。


2011/07/23 に開催されました「Androidアプリケーション、デザイナとプログラマのハッカソン」にて、
私が所属した「チームめんたいこ」で作成したアプリです。

スタッフ:
 デザイナー:kawacocoさん Matsu11さん _erisan_さん
 プログラマ:openkakuさん katsummy(私)

1日で、なんとか仕上げることができ、参加者投票で優勝を頂けました。
せっかくなので、ブラッシュアップして、リリースさせて頂きました。

http://atnd.org/events/17260
#dpthon

ちょっとした小ネタアプリですがダウンロードしてみて下さい。

アプリリンク
http://t.co/2D2Tdrt

ハッカソンの発表資料