2011年2月11日金曜日

自分のAndroidアプリに LibAndroTranslationを組み込んで翻訳してもらおう!!

Androidライブラリ「libandrotranslation」を使ってみました。
もの凄く簡単に「翻訳支援機構」が自分のアプリの取り込める事ができてお勧めです。

LibAndroTranslationとは:
libandrotranslation ホームから引用ここから
--------------------------------------------
LibAndroTranslationはAndroidアプリの多言語化を助けるためのライブラリです。

通常、アプリの国際化対応は開発者が行います。

しかし、実際に開発者がたくさんの言語のリソース(strings.xml)を用意することは非常に難しいです。

LibAndroTranslationではすべてのリソースを開発者が用意するのではなく、 アプリ自体にリソースの翻訳画面をもたせて 親切なユーザがリソースを翻訳し開発者に送信できる環境を提供します。


-------------------
引用ここまで


何が便利か:

1.翻訳したいリソースを別に用意する必要が無い
   res/valuses/に存在するxmlリソース名を元に以下の画面の様な
   アクティビティを自動生成してくれます。
送信者 Android blog Sakaneya

翻訳してくれるユーザーは、以下の様に翻訳文を入力することになります。
送信者 Android blog Sakaneya


上記アクティビティのメニューにメールが用意されており、
翻訳結果がXMLファイルとして開発者の元に届きます。

リソース名の突き合わせは必要ありません
そのまま使えるXMLファイルが送られてきます。
送信者 Android blog Sakaneya


2.導入が簡単
導入方法は「Description」にあります。

手順通りeclipseに一度インポートしてしまえば、eclipseにライブラリとして認識されます。
後はただ導入したいプロジェクトにライブラリとして追加するだけです。
送信者 Android blog Sakaneya


3.サンプルがそのまま流用できる
インテントで設定ページのアクティビティを呼ぶだけです。
私はpreferenceの1つに「Translation」という項目を設けて実装しました。
サンプルコードをそのまま使ってます。

送信者 Android blog Sakaneya

Preferenceに項目として出すよう「translation」を記述
/res/xml/preference.xml



  




以下の様に設定を表示するpreference表示アクティビティにリスナーを仕込み
/src/../PreferenceActivity.java
//「その他」カテゴリーのリスナー設定
private void setOther(){
  Preference setOther3 = findPreference("translation");
  setOther3.setOnPreferenceClickListener(new PreferenceClickListener());
}

//リスナー
private class PreferenceClickListener implements OnPreferenceClickListener {
 public boolean onPreferenceClick(Preference preference) {

  if(preference.getKey().equals("translation")){
   translation();
   return true;
  }

  return false;
 }
}
 

それに反応するメソッドを書く(この部分がサンプルソース)
/src/../PreferenceActivity.java続き
private void translation(){

    String mailAddress ="sakaneya@gmail.com";
    String versionName = DeployUtil.getVersionName(this);
    String aboutApp = APPLICATION_NAME + " "+SUFFIX+" ver"+versionName+"\n" ;

    Intent intent = new Intent(this, TranslationListActivity.class);
    // 翻訳データの送信先メールアドレス
    intent.putExtra(TranslationListActivity.INTENT_EXTRA_MAIL_TO, mailAddress);

    // 翻訳データのメールの題名に入るアプリ名
    intent.putExtra(TranslationListActivity.INTENT_EXTRA_MAIL_APPNAME, aboutApp);
    ArrayList ignores = new ArrayList();
    ignores.add("app_name");
    ignores.add("no_i18n.+");

    //無視するリソース名を入れる
    //strings_about.xml
    ignores.add("String_AboutEmailDescription");
    ignores.add("String_AboutTwitter");
    ignores.add("String_AboutTwitterDescription");
    ignores.add("String_AboutBlogDescription");

    // 翻訳画面に表示させたくないリソース名のパターン(正規表現)
    intent.putExtra(TranslationListActivity.INTENT_EXTRA_IGNORE_PATTERNS, ignores);

    // 翻訳データの保存先を変更したい場合に指定する
    // デフォルト Environment.getExternalStorageDirectory()+"/MyTranslation"
    // intent.putExtra(TranslationListActivity.INTENT_EXTRA_DIR,
    //              Environment.getExternalStorageDirectory()+"/LibAndroTranslationSample");
    
    this.startActivity(intent);
}


まとめ.
簡単に導入できるので是非使いましょう。
私の第1弾はスウェーデン語になりそうです。

2011年1月27日木曜日

Androidアプリ開発 SDK入れて一年すると発生するエラー "Debug certificate expired on ~"

2011/1/27日にAndroid SDKを入れて1年が経ちました。
別に覚えていたわけではなく、とあるエラーが発生してEclipseで実行ファイルが作れない状態になって初めて気付いたわけですが。
また1年後に発生すると思われるので、備忘録

2012年版はこのリンクを押してね。


発生したエラー:「Debug certificate expired on 2011/01/27  xx:xx:xx」※xxは時間


参考にした対処方法:
タオソフトウェアブログ:Debug certificate expired と言われました。


原因:
Eclipseのデバッグ用のkeystoreが期限(1年)切れとしてエラーを出した。


対処:
上に挙げたページの通りにKeystoreを作り直す。

その他:
他にkeystoreに依存する物として、GoogleMapsAPIのキーがあります。
デバッグ用のAPI keyは、keystoreの値に依存しているため更新が必要です。
今回はちょうどジオタグ関係でGoogleマップを扱うアプリの作成中だったためキーストア更新後、地図が表示されない事からすぐにキーストアとAPI keyの関連性を思い出しましたが、日が経っていたら直ぐに思いつかなかったかも知れません。記憶力無いので...

というわけで、使用したツールやディレクトリ、WEBページのURLを列挙して1年後に備えるとします。

備忘録:
「デバッグ用 Google Maps API KEY」
1.keytoolの場所
C:\Program Files\Java\jre6\bin\keytool.exe
2.eclipseのデバッグ用keystoreの場所
ユーザー\.android\debug.keystore
3.Android Maps API Key 交付URL 
4.ソース中のGoogleMapsAPIキーを更新する

「リリース用 Google Maps API KEY」
1.Android Market用に登録するためのMaps API KEY keystoreについて
リリース用のkeystoreは、マーケット用署名をkeystoreとして使う
よってアプリ毎に別々のAPIKeyを用意することになる 

2011年1月25日火曜日

Androidアプリのエラーレポートの中身を紹介「個人情報が送られることはない」

Androidにはアプリの「エラーレポート」を送信する機能があります。
しかし、この機能に関して解説が見あたらず、如何なる情報が送られるか一般の人には知られていません。 
そこで、安心してエラーレポートを送れるように、どのような内容の情報が渡されるかを紹介します。


1.Androidアプリの停止

アンドロイドアプリの使用中に以下の様なダイアログが表示されて、アプリケーションが停止してしまったことは無いでしょうか?
送信者 sakaneya

残念ながらこの時点で、アプリはどうにもならない状態です。
まれにこのダイアログが出ることもなく再起動してしまうエラーもありますが、
この画面が出ていれば、これからの行動でアプリが改良される可能性があります。



2.「Force close」と「Report」
エラー時に表示されるこのダイアログは、利用者にはエラーの発生と開発者にエラーレポートを送る為に存在します。

Force close」そのまま終了します。
Report」開発者にエラーレポートを送ります。

「Report」ボタンを押してエラーレポートを送ったことのある方はどの位いらっしゃるでしょうか?
一般的な開発者にとってエラーレポートはWelcomeなんですよ たぶん。

そもそも「Report」を送る気がない、「携帯内の個人情報が送信されるかも知れないから送らない」と「Force close」でアプリを停めてそれっきりって事はありませんか?
この先どのような情報が送られるのかを紹介します。



3.「Report」ボタンを押すとなにが送られるのか?

結論から 
端末機種名や使用者の情報はありません。
以下の2枚の画像が開発者に開示される内容のすべてです。

書かれている内容は、「アプリ名、バージョン、エラー発生時刻、発生箇所、発生回数、ユーザーメッセージ 」です。
これらはGoogleが用意した開発者用のWEBページで確認します。
メールなどで直接開発者に送信されるわけではありません。また無関係の者がそのエラーを見ることもできません。


画像をクリックすると大きく表示されます。
内容:プログラムのどの部分で発生したか
送信者 sakaneya

画像をクリックすると大きく表示されます。
内容:ユーザーメッセージ(エラーレポートを送信したユーザーが書き込んだメッセージ)
送信者 sakaneya

ユーザーメッセージは、ユーザーが端末で入力したままが送られます。
下の画像は、上のメッセージを入力したときの端末キャプチャーです。
このユーザーメッセージはオプションのため、書かないで空のまま送る事も選択出来ます。
送信者 sakaneya
上記に見る通り開発者に送られるレポートはプログラムのエラー情報だけです。




4.どんどんエラーレポートを送ろう

Android標準のエラーレポートでは、端末内の個人情報が送信されることはありません。
安心して「レポート」ボタンを押してもらってよいと思います。
終了したプロジェクトでない限り、アプリが改良される可能性が高くなるでしょう。
一度だけのエラー情報では行動が起きないかも知れませんが、複数集まると動かざるを得ない.....

元ネタは、Galakabe に送られてきたエラーレポートを元にエラーを再現して紹介しました。
今回のアップデート(Galakabe Ver2.1.0.1)では、WEB上の画像リンクを押した時に発生したエラーでアプリが落ちることなく適切なメッセージを出せるようになりました。
下のソースは修正した部分です。おまけに載せておきます。


具体的には以下の様にチェックが甘かった部分に
/**
* Urlに指定した先の画像をビットマップにして返す
* @param url 画像のurl
* @return 成功:Bitmap
*/
public static Bitmap getImage(String url) {
  byte[] byteArray = getByteArrayFromURL(url);
  return BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
}
nullチェックを追加して、問題が起きないよう修正
/**
* Urlに指定した先の画像をビットマップにして返す
* @param url 画像のurl
* @return 成功:Bitmap 失敗:null
*/
public static Bitmap getImage(String url) {
  byte[] byteArray = getByteArrayFromURL(url);

  if(byteArray==null)
    return null;

  return BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
}

2011年1月19日水曜日

台湾MS 藍澤さんガジェットをBloggerに貼り付ける

萌キャラでおなじみの台湾MSのSilverlightのサイトで藍澤光ガジェット?をブログに貼り付ける方法が公開されました。
ココ→ http://www.microsoft.com/taiwan/silverlight/share.htm



説明に上がっているBlogは5箇所で「Android blog Sakaneya」で使っているBloggerもその1つです。
設置方法は中国語で書いてありますが、漢字なので大体想像できますね。

しかし肝心の提供されているはずの「Silverlightのガジェットを表示させるソース」を取得することができなかったので、解決方法をココに書きます。

A.ソースの取得
私の環境では取得出来ませんでした。そのため一度HTML表示にしてサンプルに表示されているスクリプトを補完することで利用できるようにしました。
ややこしいのでファイルにて提供します。
Type1.時計版
Type0.文字版

----------------------------------------
ここからは、台湾MSの説明と同じ内容

1.Bloggerにログイン後、「デザイン」リンクを押下して「レイアウト編集」ページを表示します。
2.「ガジェット追加」リンクを押下します。
3.ガジェットを追加のページが表示されたら、「HTML/JavaScript」の項目にある「+」を押下します。
4.「HTML/JavaScriptの設定」のページが表示されます。
5.タイトル欄に「藍澤光 Blog貼紙」と入力します。
6.コメント欄に Aで取得したスクリプトを貼り付けます。
7.「保存」ボタンを押下します。
8.Blogの表示を確認します。

もちろんSilverlightが導入されていないと意味ないですよ。

2011年1月12日水曜日

Android壁紙設定、OSバージョンによる動作の違い

メールで、
「REGZAフォンなんですが、画像が2つにわれてしまいます。」
と質問が来たのですが、返信するとそんなユーザー居ないと跳ねられるため説明がてら、このブログの方に書いておきます。

The error that the other server returned was: 550 550 Unknown user xxxxxxxx@docomo.ne.jp (state 18). xxxxは伏せ字

------------------------------------------------------------------------------------------------
アプリ名など何の記述も無い1行メールなので詳しいことは判りませんが
「Galakabe Free/Proで壁紙を設定したら、画像が2つ並んでいるがコレはどうしたことだ?」
と想定して以下解説

答えは、それで「正常」動作です。

Android OSのバージョンによって挙動が違いますので、以下の動画で標準の動作を確認してください。

※バージョンの違いによらず1枚の表示ですむかもしれないテスト版もあります。興味のある方はメールください。直接送ります。
-----------------------------------------------------------------
Galakabe Free/ProのOSバージョンによる違いYouTube動画

最初に縦長画像、次に横長画像を設定した場合を動画にしました。

※Android OSVer2.2以前 2011/1/12現在 日本発売の携帯だとIS06,Aria以外
縦長画像はスクロール画面を埋めるように2枚の壁紙として設定されます。
横長画像は全スクロール画面を1枚の壁紙で埋めるように設定されます。



※Android OS Ver2.2.1以降 2011/1/12現在 日本発売の携帯だと IS06,Aria
縦長画像は画面のスクロールについていくことなく1枚の壁紙として設定されます。
横長画像は全スクロール画面を1枚の壁紙で埋めるように設定されます。



別の手
Android マーケットには
スクロール画面毎に1つの画像を貼り付けられるLive壁紙ツール
Multipicture Live WallPaper
なんてものもあります。調べてみてください。

2011年1月11日火曜日

6ヶ月目のAndroid Galaxy S おすすめアプリを纏めてみた

Galaxy Sを6ヶ月使用して、前回登場しなかったおすすめアプリを紹介します。
※前回:Galaxy S使いだけど、お勧めアプリを纏めてみたSW編


Name: ATOK
Url: http://market.android.com/search?q=pname:com.justsystems.atokmobile.trial.service
送信者 Android blog Sakaneya

日本語入力システム:
現在の所Docomo携帯(Xperia、GALAXY S)限定のダウンロード提供です。私は国際版Galaxy Sと「日本通信(株) 通信電池 b-mobileSIM」でダウンロードして使っています。



Name: Bizcaroid Lite
Url: http://market.android.com/search?q=pname:jp.co.omronsoft.BizcaroidLite
送信者 Android blog Sakaneya

名刺読み取り(名刺OCR):
カメラで撮ると会社名、部署、氏名、電話、FAX等の項目を認識してくれます。



Name: DayBar
Url: http://market.android.com/search?q=pname:jp.sakurasoftwear.daybar
送信者 Android blog Sakaneya

日にち表示:
ステータスバー部分に日にちを表示します。同時に曜日を表示するDayWeekBarも提供されています。



Name: ES ファイルエクスプローラー
Url: http://market.android.com/search?q=pname:com.estrongs.android.pop
送信者 Android blog Sakaneya

ファイラー:
前回「AndExplorer」をご紹介しました。「ES ファイルエクスプローラー」はNAS等LANで共有されたファイルをも扱えるアプリです。



Name: Evernote
Url: http://market.android.com/search?q=pname:com.evernote
送信者 Android blog Sakaneya

説明は必要ありませんね。閲覧専用で使っています。



Name: iTranslator for Android
Url: http://market.android.com/search?q=pname:org.iplatform.android
送信者 Android blog Sakaneya

翻訳アプリ:
しゃべりがそのまま翻訳されます。初めて使ったときは凄く感動しました。



Name: PowerAMP
Url: http://market.android.com/search?q=pname:com.maxmpz.audioplayer
送信者 Android blog Sakaneya

メディアプレイヤー:
Apple Losslessに対応した メディア再生アプリです。以前手持ちのCDをiTuneでm4a形式に変換して管理していましたが、そのファイルがそのまま扱えることから利用しています。



Name: Shake Them All!
Url: http://market.android.com/search?q=pname:net.yougli.shakethemall
送信者 Android blog Sakaneya

ライブ壁紙:
端末の向きによって例の緑色ロボットが積み上がって行くアニメーションが奇妙です。



Name: tDpiInfo
Url: http://market.android.com/search?q=pname:jp.co.taosoftware.android.dpiinfo
送信者 Android blog Sakaneya

DPI表示:
端末のDPI値を取得するアプリ、開発者向きです。



Name: TweetDeck
Url: http://market.android.com/search?q=pname:com.thedeck.android.app
送信者 Android blog Sakaneya

Twitterクライアント:
前回「Twidroyd」を紹介しました。現在はTweetDeckを使っています。



Name: カーディオトレーナー
Url: http://market.android.com/search?q=pname:com.wsl.CardioTrainer
送信者 Android blog Sakaneya

以前GoogleのAndroidマーケットで推薦されていたアクティビティ記録アプリです。
色々記録できるようですが、私は朝練(自転車)の時間と距離の記録用に使っています。



Name: マピオンマップ
Url: http://market.android.com/search?q=pname:jp.co.mapion.android.app.maps
送信者 Android blog Sakaneya

地図:
動作モード1つである「軽いマップ」が電波の弱いところで活躍します。



Name: 英単語700
Url: http://market.android.com/search?q=pname:jp.md.englishword700
送信者 Android blog Sakaneya

学習:
普段ローカル線やバスでは携帯を扱うことはほとんど無いのですが、たまに開くのはコレです。



Name: WallChangeDefault
Url: http://market.android.com/search?q=pname:wallchange.dividebyzero.net
送信者 Android blog Sakaneya

壁紙チェンジャー:
ボタン1つで設定した壁紙に変更するアプリです。怪しい壁紙を貼っている場合に活躍?します。



Name: Wallpaper Rotator
Url: http://market.android.com/search?q=pname:es.jacarma
送信者 Android blog Sakaneya

壁紙チェンジャー:
フォルダ中の画像を定期的に変更してくれます。
設定が楽なことと壁紙サイズを変更しないことから利用しています。



Name: GalaKabe Free
Url: http://market.android.com/search?q=pname:com.blogspot.sakaneya.galakabe


壁紙設定・作成ツール
Sakaneyaで提供しているAndroidアプリです。


※参考:Galaxy S使いだけど、お勧めアプリを纏めてみたSW編

2011年1月9日日曜日

Android壁紙設定 マーケット用にYoutube動画を作ったけどどこに表示される?

Youtubeに動画をアップロード
アンドロイドマーケットの製品紹介でYoutube動画を登録出来るとのことで、夜夜中に録画して追加したのですが、今のところ設定の項目があるだけのようです。

お題はAndroidアプリ「Galakabe Fre/Pro使い方」、アプリの起動から壁紙設定を一分で紹介します。




※他の動画については、こちら

Android 壁紙設定
Galaxy Sにスマートフォン用壁紙を設定する.2