2014年7月13日日曜日

Android Wear の Watch Face(あと電池持ち)

Watch Faceの自作
ちょっとおしゃれなWatch Faceを作ってみたくて、WEBで調べてみました。
まず作ってインストール出来ることまでは出来たんですが、Android Wearを手で覆った時に暗くなる(スリープ)時のイベントとかは拾えるんだろうか?
ちゃんとリファレンスを読まないといけないなぁ。

あと追加したアプリのアンインストールはADBコマンドでしか出来ない模様です。
考えようによっては普通のAndroidと同じなんで、情報が多くて良いかもしれません。

<参考にしたPage>
「Custom watch face for Android Wear」
http://stackoverflow.com/questions/24623321/custom-watch-face-for-android-wear




LG G Watchの電池持ち
電池持ちですが、24時間で50-60%は電池が減るような感じです。
・ちょこちょこ通知されて画面の操作はしている
・画面は常時ON
・画面の明るさは最低の1

画面をOFFにするとだいぶ電池持ちは上がりそうですが、腕を上げて時計をみるアクションを大げさにしないと画面がONにならない※ので、ちょっとストレスがたまります。
※だいたい、時計の上面が真上にくるような感じで、腕を口元にもってくるような感じだとちょうど画面がONになる感触。基本は画面常時ONでの音声操作を考えて作られているのかも。

あとギリギリ2日は持たない感じなので、電池を0%に持って行けず、バッテリーのリフレッシュタイミングが難しいですねぇ。。作ったソフトを入れるのに、USBで繋ぐと充電されちゃうし。

購入を考えている人に
以下のどれかにヒットすれば、結構楽しめそうです。
腕もとで通知を見て、しょぼいメールはすぐに既読に出来るだけでもすごい便利です。
・基本的に鞄にスマフォを入れている人
・でかいスマフォを使っている人
・Androidのアプリを自分で作れる人

2014年7月7日月曜日

LG G Watch購入、即バンド交換

LG G Watchが届きました。
ちょっと自分でアプリでも作らないと、ただの通知&音声検索ツールですねぇ。
でもまぁ面白そうなので、アプリを作ってみたいなぁ。
ちょっと考えているのが、スマフォとWear自体の電池残量の常時表示とか面白いかも。

素の状態
発送済み通知を表示(^v^)
 

バンド交換
ノーマルのバンドは腕に装着すらしてない(^w^)


腕に装着
適当にかったバンドが大きくて、一番小さい穴でもグラグラする(-_-)



せっかく届いたけど、仕事が忙しくなる見込み・・・

2013年4月28日日曜日

UIImageViewのアニメーション

UIImageViewをアニメーションするテストクラス

実際にはアニメーションの時間が長いと複数見えるし、アニメーション途中で終了させる場合にはビクつく問題がある。
でもアニメーションの時間が短いとそんなには目立たないかな。

※iOS6のARC前提
※閉じるアニメーションの終了のBlockで強引にremoveFromSuperview※しているが
 一応アニメーションの完了まではViewの実態は保持される
 (実際に利用側でインスタンスにnilを代入しているが落ちない)

<hファイル>

#import <UIKit/UIKit.h>

@interface AnimationImageView : UIImageView

- (void)setEndFrame:(CGRect)rect;
- (void)setStartFrame:(CGRect)rect;
- (void)setTime:(float)time;
- (void)OpenAnimation;
- (void)CloseAnimation;

@end



<mファイル>
#import "AnimationImageView.h"

@implementation AnimationImageView
{
    float animeTime;
    CGRect startFrame;
    CGRect endFrame;
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        
        animeTime = 0.0;
        startFrame = CGRectNull;
        endFrame = CGRectNull;
    }
    return self;
}

- (void)setEndFrame:(CGRect)rect
{
    NSLog(@"setEndFrame");
    endFrame = rect;
}
- (void)setStartFrame:(CGRect)rect
{
    NSLog(@"setStartFrame");
    startFrame = rect;
}
- (void)setTime:(float)time
{
    NSLog(@"setTime");
    animeTime = time;
}
- (void)OpenAnimation
{
    NSLog(@"OpenAnimation");

    //アニメーションなしの場合
    if (    (animeTime == 0.0)
        ||  (CGRectIsNull(startFrame))
        ||  (CGRectIsNull(endFrame))
        )
        return;
    
    self.frame = startFrame;
    self.alpha = 0.0;
    [UIView animateWithDuration:animeTime
                          delay:0.0
                        options: UIViewAnimationOptionCurveEaseOut
                     animations:^{
                         self.frame = endFrame;
                         self.alpha = 1.0;
                     }
                     completion:^(BOOL finished){
                         NSLog(@"Open End!");
                     }];
}
- (void)CloseAnimation
{
    NSLog(@"CloseAnimation");
    //アニメーションなしの場合
    if (    (animeTime == 0.0)
        ||  (CGRectIsNull(startFrame))
        ||  (CGRectIsNull(endFrame))
        )
    {
        //
    }
    else
    {
        [UIView animateWithDuration:animeTime
                              delay:0.0
                            options: UIViewAnimationOptionCurveEaseOut
                         animations:^{
                             self.frame = startFrame;
                             self.alpha = 0.0;
                         }
                         completion:^(BOOL finished){
                             NSLog(@"Close end!");
                             [self removeFromSuperview];
                         }];
    }
}

@end

<使い方>
- (IBAction)pushBtnAnime:(id)sender
{
    if (animView == nil)
    {
        NSLog(@"pushBtnOpen");
        
        UIImage *img = [UIImage imageNamed:@"testImage.png"];
        animView = [[AnimationImageView alloc] initWithImage:img];

        //iPad決めうちで右からセンターへアニメーション
        CGRect srect = CGRectMake(768,((1024-img.size.height)/2),
                                  img.size.width,img.size.height);
        CGRect erect = CGRectMake(((768-img.size.width)/2),((1024-img.size.height)/2),
                                  img.size.width,img.size.height);
        [animView setStartFrame:srect];
        [animView setEndFrame:erect];
        [animView setTime:0.5];
        [self.view addSubview:animView];
        [animView OpenAnimation];
    }
    else
    {
        [animView CloseAnimation];
        animView = nil;
    }
}

2012年4月15日日曜日

galaxy nexus(+IIJmio SIM)

galaxy nexusがオークションであまりに安かったので少し前に衝動買いをしました。また、評判の良かったIIJmioのSIMにイオンSIMから乗り換えたので、そのあたりを簡単に。


1)nexusについて
android端末もデュアルコアのハードで4.x(ICS)だとサクサクで普通に使えるもんですね。
iOSが好きなのでメイン端末をandroidにする気はこれまでなかったんですが、テザリングの出来るandroid端末とiPadかiPod touchあたりで十分に満足できる気がしてきました。

あと、iPhone4/4Sは見た目には大変美しいのですが、そのままだとどうも持ちにくい気がします。しかしnexusは薄くて軽いし、特に角がないので大きさの割に非常に持ちやすいです。
#最近の通勤時にはnexusしか触ってません。。

唯一の弱点は電池の持ちが悪いですね、画面が大きいので仕方がないとは思いますが。例えば、これまでiPhone4で写メールやマップを結構利用してギリギリ2日という使い方で、nexusだと1日の終わりには残り10%ちょっとと言う感じでしょうか。

2)IIJmioの128プラン
自分の利用方法だと、最強の通信プランです。
はっきり言ってsoftbankのiPhone回線を解約してしまおうかと少し考えてしまうくらいです。
特に、テキスト主体の軽めのデータ通信であればsoftbankの回線より
早かったりします。(twitter、RSS、2chなどテキストだけの場合)これはどうも128kbpsへの収束をさせる方法がbmobileとは異なり、通信し始めの転送速度が128kbpsを大幅に上回っているIIJの仕様みたいです。
skypeや050plusなどのiP電話も場合によっては遅延がありますが、なんとか使えます。
#どこかのMVNO会社が2000円位で(ちゃんと使える)256kbps+iP電話のプランを出してくんないかな

3)総評
個人的に、今後のモバイル端末としての理想は以下のようなものなんですが、今のiPhone(電話あり)+androidもありかも知れません。

・iPadなどの電池残量を気にしない端末でテザリング
・iPhoneかandroidをwifi(もしくはbluetooth)子機として利用
#3G回線よりwifiやBTの方が電池持ちも良いし最高じゃないですか?


<おまけ>
そういえば、nexusは届いてしばらくして開腹手術が行われています。
しかしdocomo製品のAPNをすげ替えると言うダイナミックなテザリングガードはなんとかしてもらいたいもんです。せめて自分のとこのSIMだけの縛りにして欲しい。
nexusは未だに非対応(にわざわざ加工してる)なので、どのみち関係ないんですけどもね。

2012年4月6日金曜日

androidのアプリ名を変える

友人に聞かれて少し調べたので、備忘録として。
やりたい事はホーム画面で表示されるウィジェットの名前を変えたいとの事。
androidに詳しくないまま、xmlをピピっといじれば出来るだろうと調べたら、
思ってたより手間はかかりましたが出来ました。

注意:
rootをとっている事が前提となります。これはメーカーやキャリアの
保証がなくなる行為です。またこの記事の作業を行われて問題が出たと
しても対応できません。

では手順。
ここではLED Lightと言うウィジェットを例に説明します。



1.下準備
============================
1.1.(android)LED Lightを入れる
試しに変更するウィジェト
https://play.google.com/store/apps/details?id=jp.picolyl.led_light

1.2.(android)Titanium Backup ★ rootを入れる
https://play.google.com/store/apps/details?id=com.keramidas.TitaniumBackup
このツールで名前を変更したいウィジェットのバックアップを取っておく
(デフォルト設定ならsdcard/backup/フォルダにいくつかファイルが出来る)

1.3.(android)LED Lightをアンインストールする

1.4.(pc)[1.2.]で出来たファイルをパソコンにコピーする
(例えばこんなファイル名:
jp.picolyl.led_light-29bb01df6b7a846828db592fd8eda941.apk)

1.5.(pc)Apk Managerをダウンロード
http://apkmultitool.com/?q=node/5
上のページを開いて、以下の文字を探してDownloadをクリック
APK Manager 5.0.2 - Download


2.ウィジェットの加工
============================
2.1.(pc)apkファイルを格納
[1.5.]でダウンロードしたファイルを解凍して出来た、
place-apk-here-for-modding
というフォルダに[1.4.]のapkファイルを格納

2.2.(pc)apkの解凍
解凍した直下にあるScript.batを(ダブルクリックで)実行
"9"と入力してリターン(9    Decompile apk)
→ projectsフォルダにapkが解凍される
<このコマンドラインのウインドウはそのまま立ち上げておく>

2.3.(pc)リソースの修正
Apk_Manager_5.0.2\projects\jp.picolyl.led_light-29bb01df6b7a846828db592fd8eda941.apk
\res\values-ja
の中のstrings.xmlをテキストエディタで開いて、以下を編集

<string name="app_name">【L_E_Dとか好きな名前に】</string>

2.4.(android)androidをいったんPCから外して、設定メニューにある
開発者向けオプションのUSBデバッグをオンにして繋ぎ直す

2.5.インストール
[2.2.]のコマンドラインのウインドウで
"14"と入力してリターン(14   Compile apk / Sign apk / Install apk (Non System Apps Only))

3.完成
============================
androidの画面でウィジェットを追加しなおすと名前が変わっている。
他のアプリやウィジェットでも同じような手順で変更出来ると思います。