2015/04/27 このエントリーをはてなブックマークに追加 はてなブックマーク - 【圧倒的当事者意識】DroidKaigiに行ってきた

【圧倒的当事者意識】DroidKaigiに行ってきた

カテゴリ: , ,





はい。僕は圧倒的第三者です。
DroidKaigiというAndroidの大きなイベントに参加してきました。






最近はAndroidから少し離れ気味な僕。マッチョなActivityを増やす日々だったりするので、
正直Androidの最新動向が分からない。ベストプラクティスとは。みたいな感じでした。


Androidの情報ってネットには多いんですが、
ググってもよく分からん情報ばっかり出るし何が正解か分からないなーってところもありました。


そんな中、DroidKaigiというイベントが目に入りました。
運営人も豪華メンバーというか有名どころばかり。




Webマーケティング的な部分も含めてなんか上手く取り組まれていて、
自然に興味がわきました。


参加募集開始数分で定員が埋まったわけですが、なんとか潜り込めました。
10時調度から全裸待機してた甲斐がありました。



2015/03/18 このエントリーをはてなブックマークに追加 はてなブックマーク - 【Android】Intentを発行してファイルパスを取得する

【Android】Intentを発行してファイルパスを取得する

カテゴリ:








Android端末からファイルを選択してファイルパスを取得したいと思った時、
どうやろうかなぁって思い調べたらこの記事を見つけました。

Androidでファイル選択ダイアログができなかったのでIntentでファイル選択アプリを呼び出す




この記事見た時になるほどなぁと思ったんですが、「あれこれする」ってどうすりゃいいんだ、と。
勝手に続きを書こうかなと思います。








・Android端末から外部のIntentを発行してFileエクスプローラのアプリを起動する(Google Driveとか)
・onActivityResultからファイルパスを取得する
・InputStreamを生成する



いたってシンプルです。





ファイルエクスプローラーを開き、指定したファイルパスを取得するソースは以下のとおりです。

    // 識別用のコード
    private final static int CHOSE_FILE_CODE = "12345";
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("file/*");
        startActivityForResult(intent, CHOSE_FILE_CODE);
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        try {
            if (requestCode == CHOSE_FILE_CODE && resultCode == RESULT_OK) {
                String filePath = data.getDataString().replace("file://", "");
                String decodedfilePath = URLDecoder.decode(filePath, "utf-8");
                imageText.setText(decodedfilePath);
            }
        } catch (UnsupportedEncodingException e) {
                // いい感じに例外処理
        }
    }



こんな感じでエクスプローラー向けにIntentが飛びます。任意のアプリでファイルを指定すると
onActivityResultイベントが発生し、ファイルの情報をIntentから取得できます。




Fileインスタンスの取得やInputStreamの生成はこんな感じです。Java SE6が主流なAndroid。多分。

File file = new File(decodeFilePath);
FileInputStream fis = new FileInputStream(file);






IntentからgetDataStringで取得できるというのがまず分かりませんでした。
これが正解っぽい。
file://という文字列はいらないです。接頭辞としてfile://から始まり、端末のフルパスが続くようなので、
先頭の部分を置換で切り取ってます(もしかしたら端末に酔ってはうまくいかないとかあるのかな)。


あと、取得したファイルパスはURLエンコードされてるのでそのまま使おうとするとハマりました。







今回は以下のことを目的にソースとハマりどころを書いてみました。
・Android端末から外部のIntentを発行してFileエクスプローラのアプリを起動する(Google Driveとか)
・onActivityResultからファイルパスを取得する
・InputStreamを生成する


ハマりどころなどはこんな感じでした。

・Intentでファイルエクスプローラアプリに通知する
・onActivityResultで選択したファイルの通知を受け取る
・Intent#getDataStringでファイルパスは取得できる
・file://は不要っぽいので切り取る
・パスはURLエンコードされているのでデコードする





気がかりな点としては端末依存していないか。
汎用的に使えるような処理になっているのかがちょっと気になりますね。
(例えば端末Aでは・Intent#getDataStringが"file://....."の文字列を返し、端末Bでは"//..."になってるとか)


今どきのAndroidな人はこんなこと考えずとも分かるのかなぁ。
あと外部のアプリケーション頼みなので、ダサいですね。

アプリ内部でエクスプローラー相当の機能を設けたほうがアプリによる差異が出なくて
平和なんだろうな。




2015/02/18 このエントリーをはてなブックマークに追加 はてなブックマーク - 【お約束】Kotlin + AndroidでHello Worldすぐ出来たよ

【お約束】Kotlin + AndroidでHello Worldすぐ出来たよ

カテゴリ: , ,


最近まではJavaでAndroidアプリを作っていたのですが、
ようやく使いたかったKotlinでAndroidアプリを作り始めました。


ということで、ド定番のHello Worldをやってみました。






2014/10/09 このエントリーをはてなブックマークに追加 はてなブックマーク - 【Android】AndroidAnnotations3.1でジェネリクスが使えなかった話

【Android】AndroidAnnotations3.1でジェネリクスが使えなかった話

カテゴリ:


AndroidAnnotationsより引用




一応、備忘録として。




  • AndroidAnnotationsを使用している
  • AndroidAnnotationsのアノテーションをHogeクラスに付与すると、Hoge_というクラスがジェネレートされる(ビルド時に自動生成)




  • @Transactionalを付与したメソッドの戻り値をList<Map<String, String>にすると、
    ジェネレートされたクラス側でコンパイルエラー

    実際のコードは、以下のような感じ。








    2013/10/08 このエントリーをはてなブックマークに追加 はてなブックマーク - 【Android】Activityスタックを削除する

    【Android】Activityスタックを削除する

    カテゴリ:
    Activityスタック

    今回はスタック(アプリの画面履歴)の一括削除を行いたい場合の実装を紹介したいと思います。




     まずは仕組みについて




    Activityは遷移するごとにスタックされていきます。
    スタックされた情報はActivityManagerが保有しているようです。


    2013/08/04 このエントリーをはてなブックマークに追加 はてなブックマーク - 【Android】ActionBar/ActionBarSherlockを使おう2~使い方編~(try to use ActionBarSherlock API 2)

    【Android】ActionBar/ActionBarSherlockを使おう2~使い方編~(try to use ActionBarSherlock API 2)

    カテゴリ:





    今回はActionBarSherlockについてのエントリの第2弾です。




    例のごとく、ActionBarSherlockのサイトの内容を日本語意訳してみました。




    ちなみに、「」で囲まれているのが原文、その下に日本語訳、★で囲まれているのが補足です。

    2013/07/30 このエントリーをはてなブックマークに追加 はてなブックマーク - 【Android】これは使っちゃだめよ!~非推奨APIをまとめてみた~(Summarize deprecated Class and Method)

    【Android】これは使っちゃだめよ!~非推奨APIをまとめてみた~(Summarize deprecated Class and Method)

    カテゴリ:



     何つかっちゃダメなんだ?





    AndroidのAPIというのは大きく変遷してきた。
    Android2.x、3.x、そして今では4.x系まで進んでいる。

    Honeycomb (3.x)、
    Ice Cream Sandwich (4.0.x)、
    Jelly Bean (4.1.x, 4.2.x, 4.3.x)と

    なんだかついていけないですね。



    古くから開発をしているベテランの人はさておき、
    大体の人が2.x系から開発を始めた、もしくは今から始めるという方なのではないでしょうか。


    そこで、今回は2.x系から開発をしている方を対象に、また今から開発を始める人でも
    流れが分かるように、APIの変遷について書いてみようと思う。




    ということで、ネット上で情報が散乱している、非推奨クラスやメソッドについて
    ある程度まとめてみた。(まだまだあると思うし、非推奨の定数などは含んでなかったりする)



    2013/06/30 このエントリーをはてなブックマークに追加 はてなブックマーク - ActionBarSherlockを使おう(try to use ActionBarSherlock API)

    ActionBarSherlockを使おう(try to use ActionBarSherlock API)

    カテゴリ:


    今回は、紹介エントリです。





    アンドロイドのアプリを作るときに、開発者として悩み所なのは
    アプリのデザイン(UI)ではないでしょうか。


    現在、アンドロイドアプリで主流となっているのは
    アクションバーとタブを使ったUIデザインです。

    2013/02/09 このエントリーをはてなブックマークに追加 はてなブックマーク - 【Android】Intentでメールに画像を添付する(Intent to attach images to email)

    【Android】Intentでメールに画像を添付する(Intent to attach images to email)

    カテゴリ:





    ○まずはIntentを試してみるか





    自分で作ってるAndroidアプリのバージョンアップとして、
    検索した画像と情報をメールに添付しようと考えた。

    これが地味にハマってしまったので、自分と誰かしらのために、メモしておく。


    文章は割と楽に送れた。
    実装はこんな感じ。

    2013/01/07 このエントリーをはてなブックマークに追加 はてなブックマーク - 【Android】イベントリスナー実装のベストプラクティスはなんだろう(the best coding  to use EventListener for Android )

    【Android】イベントリスナー実装のベストプラクティスはなんだろう(the best coding to use EventListener for Android )

    カテゴリ:




    前々から気になっていたこのテーマ。


    Androidにおけるイベントリスナーの実装はどのようにすべきか。考えてみたいと思う。
    同じようなエントリは少しはあったのだけれども、僕にとっては不十分に感じたので、書いてみたい。



    イベントリスナーとはボタンウィジェットのOnClickListenerとか
    アラートダイアログのDialogInterface.OnClickListener(であってるかな・・?)とか
    そういった類のものである。
    実装方法は僕の思いつく限りでは4つある。

    GA