SyntaxHighlighter

ラベル Android の投稿を表示しています。 すべての投稿を表示
ラベル Android の投稿を表示しています。 すべての投稿を表示

2012年5月4日金曜日

USBストレージまたはSDカードにインストールできませんでした

IS05いじってたらハングアップして、リセットボタンで再起動後、アプリのアップデートなんかをする時、SDカードに移しているアプリで
USBストレージまたはSDカードにインストールできませんでした
てなエラーが出てインストールやアップデートが上手くいかなくなってしまった。

で、ググったら以下のページを発見したので、忘れはしないだろうけどφ(..)メモメモ。
SDカードにアプリをインストール出来ない現象 - 価格.com掲示板 -
http://bbs.kakaku.com/bbs/-/SortID=12922435/
なんでも「.android_secure」フォルダにある「smdl2tmp1.asec」を削除すればいいのだとか。
削除する場合は、PCと接続してPC上から操作をする。ESファイルエクスプローラーでSDカード内を見たときは表示されませんでした。
IS05に限らず、Android端末であれば起きるっぽいですね :(

2012年3月10日土曜日

Androidの各Density用に画像を変換するツール

1つの画像を選択して、各Density用に変換・フォルダーに格納するツールを作ってみました。

Image Resize For Android
(Dropboxのパブリックフォルダーに入れましたが、ちゃんとDL出来るのかな…)

CodePlexに移しました。
 https://irfa.codeplex.com/


DLしたZIPを解凍して、exeファイル実行で起動できます。
readme.txtやevolus pencilで作ったモックアップもあるので、御覧ください。
また、実行には「.Net Framework 4.0」が必須となりますので、インストールしていない場合はインストールが必要になります(こちらからダウンロードできます)。
WPF(?)&C#が初めてということもあり大雑把な作りなので、甘いところは多めに見て頂くか、こっそり教えていただけたらと思います。


細かい経緯や使い方などは下記に書いていきますが、端的に申しますと

”毎回同名でサイズの違う画像を用意するのが面倒”
”SDK付属のアイコンを使うにしても、各フォルダーからそれぞれのフォルダーにコピーするのも面倒”

ということで、ひとつの画像を選択することで、必要なサイズの画像と対応するフォルダーを用意するアプリケーションがあったらいいなと思い、いっその事作ってしまえ、と作った次第です。

Androidアプリ開発をする時、ホーム画面やドロワーなどのアイコンやメニュー、タブなどのアイコンを作成するにあたって、いろいろな画面サイズに対応させるために複数のサイズの画像を用意して、それぞれの画面サイズに対応するdrawableフォルダーに追加しないといけません。
drawableに一つの解像度を用意するだけでも良いかもしれませんが、アイコンが綺麗に表示されなかったりもするので、やはり各画面サイズに対応したアイコンを用意したいところです。

ちなみに、各画面サイズに対応させるための方法について、Android Developersの「Supporting Multiple Screens」に記載されていますが、簡単に言うとresフォルダ下に
  • drawable-xhdpi
  • drawable-hdpi
  • drawable-mdpi
  • drawable-ldpi
  • drawable-nodpi
  • drawable-tvdpi
というフォルダを用意してそれぞれのフォルダに「同名」の画像ファイルやXMLファイルを格納し、プログラムやLayoutでそのリソースを指定することで、対応する画面サイズに対応するサイズのアイコンが表示されるという仕組みになっています。

Android SDKに入っている標準アイコンを使用する際も、hdpiのファイルをコピーし、mdpiのファイルをコピーし、hdpiのファイルをコピーし…イメージが違ったら一からコピーしなおし…を繰り返していて、日頃からもっと楽にできたらいいなと思っていた次第です。

で、誰かのお役に立てればと、公開してみようかと思ったので、公開してみました。

2012年2月13日月曜日

Action Bar実装編(前回の続き)

前回の続きです。

メニュー用のリソースも出来ましたので、メニュー表示をプログラムに実装して使えるようにしましょう。

と言っても今回はいろいろ工夫したりしているわけではないので、Android Developersの「Menus」にあるようなリファレンスどおりの作り方になりますが(^^ゞ

onCreateOptionsMenu()はこんな感じ。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
 MenuInflater inflater = getMenuInflater();
 inflater.inflate(R.menu.menu_main, menu);
 return true;
}

ちょこっと解説。
MenuInflater でXMLからメニューの情報を使用します。
で、nflater.inflate()で、作成したmenu_main.xmlをIDで指定します。

次に、メニューが選択された時の動作、onOptionsItemSelected()はこんな感じです。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
 switch( item.getItemId() ) {
  case R.id.appfinish:
   finish();
   break;
  case R.id.howto:
   showHelp();
   break;
  case R.id.about:
   showCredit();
   break;
 }
 return super.onOptionsItemSelected(item);
}

こちらは簡単ですね。
switch 文を使って、 受け取った MenuItem の getItemId()で選択されたメニューアイテムのIDを取得して、caseで各IDを指定します。
IDはmenu_main.xmlで各メニューアイテムに指定したIDを利用します。

これでAndroid3.0以上の環境で実行すると Action Bar として実行され、Android 3.0以前では従来のようなメニューで表示されます。

Action Barでの表示方法は前回書きました、show As Action の指定の方法で変わってきます。実際に設定して動かしてみると違いがよくわかると思います。

最後に、アプリのバージョンアップです。

マニフェストファイルの Version Codeを前回よりも大きい数字(今回の私の場合、1 → 2)に変更して、Version Nameも任意の値を指定(今回は1.0.0 → 1.1.0)、アップロード用の apk ファイルを作成したらAndroidマーケットのデベロッパーコンソールでアップロード済みのアプリを選択し、「APKファイル」タブを選択して、新規のAPKファイルをアップロード。アップロードが完了したら新しい方のパッケージを有効にして、必要に応じて「商品の詳細」タブでRecent Changes(更新情報)を記入して、「保存」をクリック。

すぐ見ても反映されませんでしたが、一晩たった時点では反映されていました(最短どのくらいかは…あとで調べてみようと思います)。
ちなみに、更新情報に

あああ
いいい

というように書いたらそのまま出るのかと思ったら、
  1. あああ
  2. いいい
というように、各行が番号付きで表示されるようでした。

2012年2月12日日曜日

今までのメニュー表示からActionBarを利用したメニュー表示に変更

前回のエントリーでAction Barを使ってみようということで軽く調べてから、Androidマーケットにアップしている「シンプル電卓」を改良して、ついでにバージョンアップのテストもやってみようかという企画(?)です。

一般的なMenuの作り方は
private static final int MENU1_ID = Menu.FIRST;
private static final int MENU2_ID = Menu.FIRST + 1;
pivate static final int MENU3_ID = Menu.FIRST + 2;
というような感じで、Menu用のIDを作って、
@Override
public boolean onCreateOptionsMenu(Menu menu) {
 boolean result = super.onCreateOptionsMenu(menu);
 // メニューアイテムを追加する
 menu.add(0, MENU1_ID, Menu.NONE, R.string.menu1Label).setIcon(R.drawable.ic_menu_close_clear_cancel);
 menu.add(0, MENU2_ID, Menu.NONE, R.string.menu2Label).setIcon(R.drawable.ic_menu_info_details);
 menu.add(0, MENU3_ID, Menu.NONE, R.string.label_about).setIcon(R.drawable.ic_menu_notifications);
 return result;
}
と、onCreateOptionsMenu()でMenuボタンを押した時に表示されるメニューを作成し、
@Override
public boolean onOptionsItemSelected(MenuItem item) {
 switch( item.getItemId() ) {
  case MENU1_ID:
   finish();
   break;
  case MENU2_ID:
   showHelp();
   break;
  case MENU3_ID:
   showCredit();
   break;
 }
 return super.onOptionsItemSelected(item);
}
てな感じで、onOptionsItemSelected()でメニューが選択された時の動作を決定するわけです。

これを、Action Barを使用した作りにします。
まずは、作成しているアプリのmin SDK VersionとTarget SDK Versionを決定します。
Action Barが使えるようになったのはAndroid 3.0(Level 11)からなので、Target SDK Versionは11以上に設定しましょう。min SDK Versionは自分のアプリの最低条件をつけてやりましょう(私の場合はAndroid 1.6なので4です。)。

次に「project.properties」にあるTarget SDKにも先ほど設定したTarget SDK Versionと同じ数字を「Android-xx」の「xx」につけましょう。そして、eclipse再起動。私の場合、eclipse再起動で後ほど設定するshow As Actionが有効になってくれました。

下準備が整いましたので続いて、menu用のリソースを/res/menuの下に作ります(resの下のmenuフォルダはresを右クリックして[新規]-[フォルダー]です(eclipseの場合))。
「Android XML File」を新規作成し、Resource Typeに「Menu」を設定、ファイル名を入力して(ここでは menu_main)完了。
こんな感じの画面になります(Itemなどすでに追加済みですが…)
res/menuのxml編集画面
 xmlを直接記述でもいいですが、ここはGUIで操作をしましょう。
はじめは Menu Elements には何もありませんので、Add ボタンをクリックして、「Group」か「Item」を選択してOKを押します。
すると、Menu Elements に一つデータが追加されました。
後はそのアイテムのIDやTitle、Iconを設定します。
次に、ようやくここで show As Action の設定です。
show As Actionの右側の Select ボタンを押すと
  • never … Action Barには表示されない
  • ifRoom … Action Barにスペースがあれば表示する
  • always … 必ずAction Barに表示する
  • withText … Action BarにIconと共にテキストを表示する(Land Scape時のみ?)
  • collapseActionView … action viewを関連付けることで折り畳めるメニューを表示(Level 14から)
の選択肢が表示されます。
collapseActionViewですが、エミュレータで確認した限りでは、WVGA800では通常のMenuと同様にポップアップ表示、WXGA720ではひとまとめになって表示されました。
collapseActionView
なので、「ある程度の解像度から」と書きました。が、間違っていればご指摘をお願いいたします(他に設定すればWVGA800でもひとまとめ表示になるよ、など)。
※訂正:Nagoya0さんからのコメントにありますとおり、collapseActionViewを指定したために通常表示やまとまった表示になっていたのではなく、action viewを指定していないためにデフォルトの動作になっていただけのようです。
collapseActionViewを使用する場合はandroid.widget.SearchViewのようなaction viewと関連付けて使用することで伸縮するメニューを利用することができるようです。
SearchView を使った例。上が閉じた状態、下が展開した状態


と、とりあえず、今回はここまで。次回は続きとAndroidアプリのバージョンアップについて書きたいと思います。

次回:Action Bar実装編

2012年2月6日月曜日

ActionBarを使ってみようかと…

android developers blogの「Say Goodbye to the Menu Button」でActionBarを使おうって言ってるので、とりあえず軽く触ってみて、ついでに、テストアップしたアプリもActionBar対応にしようかと思ったのですが…

Dev GuideのAction Barのページ(こちら)を参照しながら作ってみると、res/menuのmenu.xmlで「android:showAsAction」を使おうとするとエラーでアプリがビルドできず。

さてどうしたもんかと、Menu Resource(こちら)のページを見てみると「Introduced in API Level 11.」という記載が。

Min SDK : 4、Target SDK : 14でやっていたのを両方11にしたら動くようになりましたが、はて、11以外では動かないのかな?
それともサボってソースとその周辺だけ読んでいるせいでなんか見逃してるのかな?
ちなみに、Min SDK:11だけでTarget SDKをなしにしてもダメでした。

もうちょっと調べてみよう。

追記:
調べた結果、というか動かしているうちにMin SDK : 4、Target SDK : 14でも動くようになったので、更に見てみると「project.properties」のtarget-SDKも「android-14」にすることと、eclipseを再起動することで使えるようになりました。
res/menu/menu.xmlを編集する際にGUI編集画面に「show as action」の入力欄が出ていない時はビルド出来ず、表示されるようになればビルドできるようになりました。

あ、調べるついでに、Androidのマスコットの名前を再調査しました。
以前調べた時には、もうなくなったページの配布画像の下に「droid : jpeg」とあったので、droidかなぁ、と思っていました(droidもロボットの意味でしょうけど)が、実際は「公式の名前はない」ということらしいです(こちらを参照)。Brand Guidelinesでも「Android Robot」ってしか書いてないですしね。
他に、Googleの中の人たちはマイクと読んでいたり、犬のマスコットをアレックスと読んでいたり。
まあそれでも、今後も言いやすいので「ドロイドくん」 と呼ぼうと思いますが。

ちなみに、WikipediaのAndroidを見ると「正式名称はGoodies」と書いてありますが、もうなくなった「http://www.android.com/media/goodies.html」というページ(こちらの記事でスクリーンショットが見れました)に画像やらフラッシュバナーがあったのですが、このページのファイル名「goodies」やサムネイルの上の「Goodies」を名前と勘違いしたんだと思います。Goodiesは「グッズ」っていう意味でしょうからね。

2012年1月27日金曜日

Android Marketにテストアップしてみた

Androidマーケットへ開発者登録が無事完了(前回エントリー)しましたので、続いてテストアップして見ました。

手順としては、
  1. アップロード用のapkファイルを作成
  2. デベロッパーコンソール画面からアプリケーションをアップロード
  3. 「商品の詳細」で必要事項を設定
  4. 設定が終わったら、上の方にある「公開」ボタンをクリック
  5. apkファイル画面に「有効にする」というリンクがあるのでクリックする
    おそらく有効にしないと公開されないと思われます。
これで完了。
アップロード用のapkファイルは署名を付けないといけないのですが、私はASCII.jpの
これで作れる! Androidのアプリケーション ― 第11回
を参考に作成しました。
また、アップロード時の参考にThinkITの
第4回 アンドロイドマーケットにアプリを公開しよう!(その2)
を参考にしました。
「アプリケーションをアップロード」をクリックするとこんな画面が出ます

こちらはアップロード後&有効にした後です

必要事項を設定
 スクリーンショットは2枚以上必須。高解像度アプリケーションアイコンというのはAndroidマーケット上の各所で表示されるときのアイコンになります。
「マーケティングの除外」というのは、これを有効にすると「GoogleがAndroidマーケットやGoogleが運営しているサイトなど以外ではマーケティングしないでください」という意思表示になるようです。
商品の説明を記入
言語を設定(今回の場合、日本語のみに設定)して、タイトルと詳細説明(Description)を記入。ファーストリリースなので、Recent Changesは未記入。プロモーション画像なども無いので、Promotion Textも未入力です。
あとはアプリケーションタイプとカテゴリを選択して、コピー防止(近々なくなるのでどちらもで変わらないらしいです)、レーティング、価格、公開地域、連絡先を入力し、同意事項をよく読んで同意したら「公開」です。

公開後、Androidマーケットから検索してもすぐにはヒットしません。
PCなどのWebからアクセス限定ですが、直接アプリのページや自分が公開しているアプリ一覧を表示する方法があります。
一応、一晩立ってからAndroidマーケットの検索機能で検索して表示されるようになりましたが、アップ後直ぐに自分でダウンロードテストしてみたい場合は上記の方法を試してみてください。ちなみに、現在も同じかはわかりませんが、自分のアカウントで自分の有料アプリを購入することはできないようです(Google Groupsの日本アンドロイドの会のこちらを参照)。

2012年1月24日火曜日

Android Market開発者登録完了!

昨日のエントリー(こちら)でAndroid Marketの開発者登録をしたけど処理中で完了しないから問い合わせした、ということを書いたけど、ついに登録完了しました!

問い合わせ後のメールに返信して、それの回答メールのタイムスタンプが6:30頃なので、その頃に対応してくれたようです。

登録処理が進むと以下のような画面になります。
販売/配布契約書
この契約書を読み、「同意して次へ」を押すと登録完了です。
そして、自分のデベロッパーコンソール画面が以下のようになります。
承認されました
これでようやくアプリを公開できるようになったわけです。よかったよかった:-)

Android Marketへ開発者登録。しかし…

Twitterでもつぶやいてますが、Android Marketへデベロッパー登録から現時点(1/24 1:15)までの状況を。

Androidアプリの公開にあたって、一番手っ取り早いのはGoogleが運営しているAndroid Marketに登録・公開する方法です。Android Marketに開発者登録をする場合、25USドルの登録料をクレジットカードで決済する必要があります(執筆時点のレートが1ドル約77円なので約1925円)。

私は逆引きAndroid入門というサイトの「開発者登録するには」というところを参考に実施しました。詳細はこちらをみていただくとして、下に簡単な手順を記します。

  1. (持っていない場合)Googleアカウントを作成する
  2. http://market.android.com/publish/にアクセスし、ログインする
  3. 必要な情報を入力し先にすすめる
    ここで電話番号を入力しますが、私の場合、携帯番号を「+81-90-xxxx-xxxx」と入力しました
  4. クレジットカードの情報と各必須項目を入力します
  5. 全て入力が終了したら注文を確定する
  6. 完了画面が表示されたら、「Android Market Developer Site」というリンクをクリックして開発者サイトに移動します
  7. すると以下のような画面が表示されます
デベロッパーコンソール
 この画面の上部にある「Androidマーケットへの登録はまだ処理中です。」が消えれば、アップロードしたアプリが公開されるようになるのですが…私の場合、一晩経っても変わらないまま(´・ω・`)
もう少しまとうかとも思いましたが、ググると、別アカウントで再登録したらすぐに処理が完了して、アプリを公開できるようになったということでしたので、とっとと問い合わせを出すことにしました。
その問い合わせ先がこちらの右にある「サポートに連絡」へ進みます。アクセスするとわかるかと思いますが、この連絡先、英語しかありません。なんということでしょう\(^o^)/
しかし、戸惑っていても仕方がありませんので先に進み、「Android Market Developers: Publishers & Merchants」から「Registration or Account Issues」の入力フォームに。

必須項目を入力しつつ、Issue Typeに「I can not complete developer registration」を設定しFull Descriptionに(英語で)「注文処理したけど未だに処理中なんですが」的な内容を書いてsubmit!

すると即効でメールが一通。こんなことをやってみてねという内容で大雑把に書きだすと以下のとおり。
  1.  Known Issue Pageを見てみてね
  2. そのアカウント、以前にAndroid MarketでSuspendedしてない?
  3. 違うクレジットカードで試してみて
  4. Cookieや履歴を削除してから試してみて
  5. JavaScriptを有効にしてね
  6. 違うブラウザで試してみてね。その際、拡張機能は全て止めてね
  7. それでもダメならこのメールに返信してね。ついでにスクリーンショットとOSのバージョンとブラウザのバージョンとブラウザのエラー情報やらhttpログやらがあったら頂戴
このへんの情報もググッたときに見ていたので(クレカ以外)実施済み。ということでこちらも速攻で返信。

で…その後、まだ「処理中」のまま。まあ、問い合わせしたばかりだし、とりあえず、もう一日待ってみることにして、進展があったら追記します。

2012年1月16日月曜日

Androidアプリで使用するサイズの単位

Android Developers - Dev Guide - Dimension

Androidアプリで各サイズを指定するときの単位は以下のものがある。

dp(dip) - Density-independent Pixels
160dpiの画面に対して1dp(1dip)=1pxとして扱い、実際のピクセル数はユーザーが利用している端末の解像度に応じて変化する。dpもdipも同じだが、dpを使ったほうがspとの関係がわかりやすい

sp - Scale-independent Pixels
dpに似ているが、ユーザーが設定しているフォントサイズに応じて変化する。このため、フォントサイズの指定はspを使うことが推奨されている。実際のピクセル数は解像度とフォントサイズに準ずる

pt - Points
物理的な画面サイズの1/72インチを1ptとして扱う

px - Pixels
使用している画面のピクセル数。デバイスによってピクセル数が異なる場合があるため、この単位は推奨されない

mm - Millimeters
物理的な画面サイズでのミリメートル単位の長さ

in - Inches
物理的な画面サイズでのインチ単位の長さ

res/valuesの下にdimens.xmlなどで大きさを定義することができる
<?xml version="1.0" encoding="utf-8"?>

    25dp
    150dp
    30dp
    16sp


アプリケーションコードから参照する場合は
float font_size = getResources().getDimension(R.dimen.font_size);
と書き、xmlから参照する場合は

と書くようです。

2012年1月15日日曜日

Androidアプリのデザインガイド

Android DevelopersのBlogの以下のエントリーで紹介されてます。
Introducing the Android Design site

詳しい内容はこちらのページ。
Android Design