Tips


 

これはどうやればいいの?

こんなことできた!

メモを残しておかなきゃ


ソフトウェアキーボード非表示

2011/10/04 23:17 に まつぼっくり が投稿

要件

アプリ画面が表示された直後はソフトウェアキーボードを非表示にしたい。

コード

Fragment の onCreate() 内

getActivity().getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);



開発用署名 debug.keystore

2011/04/05 19:04 に まつぼっくり が投稿   [ 2011/04/05 19:14 に更新しました ]

目的


開発用デバッグキーを会社のPCと自宅PCで共有する。
(会社内のプロジェクトチーム内で共有する)

背景

会社と自宅で開発を行っているが、デバッグ用の署名ファイルが異なるため、開発場所(PC)が変わったらアプリをアンインストールしなければならなかった。
アンインストールしてしまうとアプリ内のデータが削除されてしまう。
デバッグキー(署名)が同じであるならば、このような問題は発生しない。

解決方法


会社か自宅どちらかの debug.keystore ファイルを共有すれば問題は解決する。
このファイルがどこにあるかを調べる。

  1. Eclipse を起動する
  2. メニュー > ウィンドウ > 設定
  3. Android > ビルド
  4. デフォルト・デバッグ・キーストア にファイルの場所が記載されている
このファイルを共有したいPCにコピーする。コピーする場所はどこでもいいしファイル名を変更してもいい

デフォルト・デバッグ・キーストアの下にカスタム・デバッグ・キーストアにコピーしたファイルの場所を入力する

その他

デバッグキー自体を作成する方法はあるのだろうか?と検索したらすぐでてきた。

検索(google)
http://www.google.co.jp/search?q=debug+keystore&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a

参考ページ
Androidのデバッグ用キーストアとキーを生成する方法

Facebook 連携

2011/03/30 23:45 に まつぼっくり が投稿

Twitter 連携として”つぶやき”を投稿する機能を実装することが多い
2011年はFacebookを始める人が多くなりTitter同様ソーシャルメディアとなると考える。
ここにFacebookと連携する方法を調査した内容をメモを残す

公式サイト > Facebook Developers

Facebook Android SDKをダウンロードする

SDK は github で公開されている。先にTortoiseGit をインストールしておく。 > 参考
SDK をダウンロードするフォルダをエクスプローラで開く。
右クリックしてGit cloneを選択

git://github.com/facebook/facebook-android-sdk.git
facebook-android-sdk というフォルダが作成される。

eclipse にプロジェクトを追加する

ファイル>新規>Androidプロジェクト

外部ソースからプロジェクトを作成を選択
ダウンロードしたSDKの中にあるfacebook を選択してプロジェクト作成完了

Facebook アプリをさっそく作る

ファイル>新規>Androidプロジェクト
いつも通りに新規にプロジェクトを作成する。

プロジェクトのプロパティを開いて Android タブを選択
ライブラリにfacebookプロジェクトを追加する。

ここまででFacebook SDKを利用することができるようになった。

Facebook にアプリを登録する

Facebook developer

Set Up New App ボタンをクリック

要求されるものを入力して、アプリ情報の画面が表示されたら
Mobile and Devices を選択

アンドロイドという項目にキーハッシュを入力する

OpenSSL が必要になるのでインストールする。(記事の最初に書いておくべきでした)

> 参考

開発中はデバッグキーを使用するのでキーハッシュはデバッグキーのものを登録しておく
正式に公開するときにあらためてキーハッシュを登録し直す。

デバッグキーの場所
C:\Users\ユーザ名\.android

ファイル名
debugt.keystore

keytool は jdk の bin フォルダ内にある。
C:\Program Files (x86)\Java\jdk1.6.0_23\bin

パスを通しておくと楽です。

keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64

コマンドプロンプトで上記を入力する
うまくいかない場合はOpenSSLがインストールされていないか、パスが通ってない、ファイル名が間違えているかもしれません。

debug.keystore をフルパスで入力するか、keytool もフルパスで入力する。いずれも大変なのでkeytoolがあるフォルダにパスを通しておく方がいいでしょう。debug.keystore のあるフォルダに移動して上記を入力すればいいと思います。


表示されたキーハッシュを先ほどの画面に入力する。

準備完了


サンプルをいじってみる

Facebook SDK の中に example フォルダがあります。この中に2つのサンプルが含まれているので
stream フォルダの方を使いたいと思います。

eclipse で ファイル>新規>Androidプロジェクト
先ほどのフォルダを指定してプロジェクトを作成します。(コピーしたフォルダを使用する方がいい)


App.java にFB_APP_ID があるので、自分のAPP ID に置き換える。

Facebook developer


実行すると、画面上に Welcome to Stream と Connect ボタンが表示された。

画面が遷移して「アクセス許可」を求める画面が表示される。自分のアプリなのでためらいなく「許可」

ログインIDやパスワードを求められなかったのはそのうち調べる
>たぶん、プリインアプリが何かしてるのかしら?


背景を透過にする

2011/01/30 2:26 に まつぼっくり が投稿

Activity は何もしなければ黒背景になります。


背景を透過にするためには AndroidManifest.xml に下記を追記することで実現できます。


背景透過
@android:style/Theme.Translucent"

または

背景透過+タイトルバーなし
@android:style/Theme.Translucent.NoTitleBar"

例)
AndroidManifest.xml
<activity 
android:name="ProfileActivity" 
android:screenOrientation="portrait" 
android:theme="@android:style/Theme.Translucent.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

Name : ProfileActivity
Theme : @android:style/Theme.Translucent.NoTitleBar

これで背景が透過になります。

Log

2010/11/16 23:15 に まつぼっくり が投稿

アプリを開発しているときってデバッグで1行ずつ見ていくこともするのですが、LogCat で見るだけの時がすごく多いです。
Log.d(TAG, Message) と書けばいいのですが・・・

下記のようなものを出力したいんです。
07-13 16:16:56.990: DEBUG/*************(****): *****HomeActivity<1>#Message<jp.co.*****.android.*******.BaseAvtivity#onStop(line:37)>

クラス名1<番号>#メッセージ<クラス名#メソッド名2(line:行番号)>

クラス名1 : this.class.getSimpleName()
番号 : ログ番号(任意の数字)
メッセージ : 任意の文字列
クラス名2 : スーパークラスなど実際のクラス名(ファイル名でもいい)
メソッド名 : ログを出力したメソッド名
行番号 : ファイルの行番号

番号、メッセージは自分で記述する
クラス名、メソッド名、行番号は自動で挿入してもらいたい

ログを出力しても、数が多くなってくると「どこ?」って探してしまうのが面倒だったので
クラス名2、行番号を一緒に出力させたかったんです。

これは結構簡単にできました。

public static MyLog(Obj obj, int no, String message) {
  Throwable tr = new new Throwable();
  StackTraceElement st = tr.getStackTrace()[1];
  String message = msg + "<" + st.getClassName() + "#" + st.getMethodName()
+ "(line:" + st.getLineNumber() + ")" + ">");
  Log.d(TAG, message);
}

上記ソースだけだと、
Message<jp.co.*****.android.*******.BaseAvtivity#onStop(line:37)>
これだけが出力されます。

obj.toString() と no を追記すればいいだけです。ただ、obj が null の場合の処理は必要



アプリがインストールされた、アップデートされた

2010/10/13 8:01 に まつぼっくり が投稿

Twitter を見ていると、アプリをインストールしました~ とかアップデートしました~ なんていうのを見かけます。

あれって、わざわざ自分で書いているとは思えなかったので調べてみました。

Twitter に投稿する部分はちょっと大変かもしれませんが
インストールされたり、アップデートされたりというのは簡単にわかります。


PackageAddedReceiver.java
public class PackageAddedReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
CLog.d(this, 1, "intent = " + intent);
}

}

AndroidManifest.xml
<receiver
     android:name="jp.caldroid.PackageAddedReceiver">
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_ADDED" ></action>
        <action android:name="android.intent.action.PACKAGE_INSTALL"></action>
        <action android:name="android.intent.action.PACKAGE_REPLACED"></action>
        <data android:scheme="package"></data>
</intent-filter>

いくつか action を設定してみましった。
何が違うかいまいちわかってませんが、とりあえず上記のような記述でイベントがとれました。

参考リンク)



1-6 of 6