@neiraza

2匹の怪獣が寝た後にプログラマーしてる、最近はサイバーエージェントでゼミ長もしてる僕のネタ帳

Androidのwebview背景を透過でクンカクンカ

日々、AndroidやiOSをいったりきたりしつつ、
ちょいちょい、JSも差し込みで対応しながら、アプリつくってます。

今日は忘れがちな、webview背景を透過について。
やりたいことはActivityの画面遷移後でも、1つ前の画面を見えるようにしておきたい。

ラノベ最終巻12が出たばっかですし、
せっかくなので、黒猫のクンカクンカを貼っておきますね。
BD1巻出るまでイ㌔


黒猫族のくんか - YouTube

  • Activityの背景を透過しよう
<activity
    android:name=".hoge.FugaActivity"
    android:theme="@android:style/Theme.Translucent"/>
  • webviewの背景を透過しよう
webView.setBackgroundColor(0);


これで万事解決!

GCMで複数のレシーブ様が登場したぜヒャッハー

今更ですが、C2DMからGCMへ移行したので、
気になったポイントを1つピックアップ。


その前に神猫さんがクルッとまわりますね
f:id:redogu:20130611182407g:plain


Pushサービスを複数利用できる仕様ではだと思うので、
https://developer.android.com/google/gcm/adv.html:Receiving Messages from Multiple Sendersを参照
n個のPushサービスに対し、アプリ内で1つのレシーバでokかなと思うけど、

もし、外部の既製品であるPushサービスを利用すると、
提供されるSDKにレシーバも入っていると思うのね。
そいつと、元々自分がGCMBaseIntentServiceを拡張してつくったレシーバで、
処理が競合してくるよね、何も考えないと両方が受信し始めて。

というわけで、僕はこんな処理で自分のsenderさんだけ対応するような実装してる。

@Override
protected void onMessage(Context context, Intent intent) {
    String senderId = intent.getStringExtra("from");
    //notification出す為にゴニョゴニョするんだと思う
}


っていうのが、自信ないのでエントリを書いておくことにした。

Androidの位置情報がとれなくなった(非開発ネタ)

開発用のAndroid端末で位置情報が取得できなくなった。

3G回線を利用していないやつなので、
WI-FI基地局の位置情報か、GPS頼み。

WI-FI基地局の位置情報が急にとれなくなったとか言われても
確認がよくわからないので、GPSだけ確認してみた。

A-GPSの衛星軌道データがキャッシュされていて、
時間かかってるんじゃないかなー?と思い、

「GPS Status & Toolbox」ってツールで、
“メニュー”⇒“ツール”⇒“A-GPSの管理”でダウンロードを選択すればOK


これで大丈夫かなーと思ったら、やっぱりダメ。


なんとなく会社の非常階段に出て、リトライしたら10秒くらいで位置がとれた!




GALAXY S os2.2以外はね・・・。

ユー、Map Keyを取得しちゃいなよ

Android Maps API v1のAPI Keyを久々に新規に取得したのでめもめも。

仕事でAPI v1を使っていて、
(v2になればKey取得とかなかったような気もするけど)
サービスがまだv1なので開発機をかえる毎に取得しなおし。

そんなわけで、すぐに手順を忘れるのでメモる。

debug.key取得

HOME/.android/debug.key
これが無い場合は適当なIDEやantでアプリをbuildすると勝手につくられているはず。
keytoolで作成することも可能だけど、どうせIDEで開発するなら、
そいつに作成しておいたほうが無難なきがす。

md5を使うのでメモっておく

keytool -list -v -keystore ~/.android/debug.keystore

ちなみに・・・
keyのパスワードはandroidなので、自前で生成する場合は同じにしといた方がいいんでないかな。
下記、公式より抜粋。

debugしちゃいなよ(Android公式リファレンス)

Keystore name: "debug.keystore"
Keystore password: "android"
Key alias: "androiddebugkey"
Key password: "android"
CN: "CN=Android Debug,O=Android,C=US"

API Key取得

debug.keystoreが作成できたら、下記ページでterm踏みつつ、キーを生成する。
僕がハマったのは、なんかsha1sha1 と思って何度もsha1で入力して、よく見たらmd5だったとこくらい。

地味に生成サイトが見つからないって人もいるかも。
GoogleのAPI Key 生成サイト


keyが生成できたら、そいつを使ってアプリをビルドすれば終わり。

Androidアプリテスト技法

Androidアプリテスト技法

cocos2dの画面回転制御ネタ

前置き

以前リリースしたゲームで使っているcocos2dがずっとv0.9ぐらいで古かったので、
このたび、バージョンをあげることにした。
iTunes App Store で見つかる iPhone、iPod touch、iPad 対応 ChickenGame

最新はv2とか出ているみたいだけど、まずはv1.0.1で。
※本当は管理にCocoaPodsとか使った方がいいんだけど、まいっか。

使用中のcocos2dのバージョン確認

使用中のcocos2dのversionは、
cocos2d.mを見ればわかります。

回転がくるった

でも起動すると全く回転してないような。
f:id:redogu:20121110235202p:plain

iPhone6シュミレータを使ってると上手くいかない。
悩むこと数分。

回転の制御ネタだろうなと思い、こんなことをした。
GameConfig.hのGAME_AUTOROTATIONの値を変更した。
kGameAutorotationUIViewControllerがデフォルトで入ってたので、
kGameAutorotationCCDirectorにしただけ。

  • kGameAutorotationNone

回転しない

  • kGameAutorotationCCDirector

回転はcocos2dに委ねる、UIKitは使わない

  • kGameAutorotationUIViewController

回転はcocos2d、UIKitの両方を使う、但しパフォ落ちる

下記ソース

//
// Supported Autorotations:
//		None,
//		UIViewController,
//		CCDirector
//
#define kGameAutorotationNone 0
#define kGameAutorotationCCDirector 1
#define kGameAutorotationUIViewController 2

// 3rd generation and newer devices: Rotate using UIViewController. Rotation should be supported on iPad apps.
// TIP:
// To improve the performance, you should set this value to "kGameAutorotationNone" or "kGameAutorotationCCDirector"
#if defined(__ARM_NEON__) || TARGET_IPHONE_SIMULATOR
#define GAME_AUTOROTATION kGameAutorotationCCDirector

結果、こんな感じに。
f:id:redogu:20121110235156p:plain

小さな島国にずっといると、こーなる事例

普段、日本語しか使わない。
あとはせいぜい、英語を少しかじるていど。

こんな生活、環境にいるとLocale.ROOTを忘れる時がありますよね。

なに言ってんだ。valuesだのvalues-frだのvalues-jaだのvalues-koだの。


values-arだの(笑


今日、アラビックでアプリを操作してたら、
( ´∀`)<ぬるぽ
が発令されました。

原因は、

//これでも、たぶん大概の言語圏は通ってるんじゃ
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
//こうしておけばいいんじゃないかと
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.ROOT);

ここ見落としていて、長考してもーた。

Androidの端末設定が標準で色んな言語に変更できるようになって、
初めて検証したって人も多いのかもなーと思ったり。