2011年12月6日火曜日

[android]ICSのCalendar APIの差分を"ちょっとだけ"見てみる。

備忘録を忘れそうになるくらい、ひっさびさの更新ですね。。。

android4.0の発表の際に、googleカレンダーの取り扱い代わるよ!
的なことは聞いてたので、今回はちょっと差分を見てみました。

googleカレンダーのカレンダー一覧を取得するコード

// カレンダーのリストの作成(android2.3)
private void CalendarList() {
 Uri uri = Uri.parse(
   "content://com.android.calendar/calendars");
 String[] projection = new String[]{"_id","displayName"};

 Cursor cursor = getContentResolver().query(uri,
   projection, null, null, null);

 if (cursor != null) {
  try {
   while (cursor.moveToNext()) {

    // カレンダー名とIDを取得
    String id = cursor.getString(cursor
      .getColumnIndex("_id"));
    String displayName = cursor.getString(cursor
      .getColumnIndex("displayName"));

    Log.d("CalendarList", id + " " + displayName);
   }
  } finally {
   cursor.close();
  }
 }
}

以前はこんな感じのコードだったんですが、
ICSでは下の書き方でいけます。

// カレンダーのリストの作成(android4.0)
private void CalendarList() {
 Uri uri = Calendars.CONTENT_URI;
 String[] projection = new String[] { Calendars._ID,
   Calendars.CALENDAR_DISPLAY_NAME };
 String selection = "((" + Calendars.ACCOUNT_NAME + " = ?)
   AND (" + Calendars.ACCOUNT_TYPE + " = ?))";

 // google calendar から取得
 String[] selectionArgs = new String[] {
   "my_name@gmail.com" , "com.google" };

 Cursor cursor = getContentResolver().query(
   uri, projection, selection, selectionArgs, null);

 if (cursor != null) {
  try {
   while (cursor.moveToNext()) {

    // カレンダー名とIDを取得
    String id = cursor.getString(cursor
      .getColumnIndex(Calendars._ID));
    String displayName = cursor.getString(cursor
      .getColumnIndex(Calendars.CALENDAR_DISPLAY_NAME));

    Log.d("CalendarList", id + " " + displayName);
   }
  } finally {
   cursor.close();
  }
 }
}


差分としてはURIの指定方法が変わったのと、
以前はgoogle calendarのAPIにあったフィールド(IDとか)が
直接指定できるようになってるのですごい楽になってる。

ICS以前からの修正はそこまで大きくないと思ってるので、
使ってるアプリが早くVerUpされるのを期待するる。

2011年4月5日火曜日

Birth2Cal 使用方法/サポートページ

Birth2Calをダウンロードありがとうございます。
以下はBirth2Calの使用方法などの説明のページになります。

■Birth2Calを使用頂く前に。
DLして頂いたBirth2Calは、ユーザー様の連絡帳に登録済みの誕生日情報を
カレンダーへ登録するアプリとなっております。
連絡帳に誕生日情報が登録されていないとご使用できません。

■Birth2Cal 使用方法
1.アプリを起動し、メニューから「カレンダー選択」を選び、
登録先のカレンダーを選択します。
※メールアドレスが表示された場合は、それを選択して頂いて問題ありません。

2.メイン画面で、連絡帳の誕生日情報が登録済みのユーザが
一覧で表示されています。
カレンダーに登録したいユーザーにチェックをつけて
「カレンダーへ登録」ボタンを押すと、登録が始まります。
※メイン画面にユーザーが表示されない場合は、
電話帳に誕生日/記念日が登録済みユーザーがいることを確認して下さい。

3.登録した誕生日/記念日情報を消去したいときは、
メニューから「設定」を選択し、
消去したい情報が登録されているカレンダーが選択されていることを確認し、
「誕生日/記念日の完全消去」を選択して下さい。

■最新のVersionUp内容
[2012/04/20]ver.1.5.0
・Android 4.0 対応
・リファクタリング

■Q & A
Q1:ジョルテなどカレンダーアプリに反映されないです。
A1:Birth2Calで登録の前からカレンダーアプリを起動していた場合、
一度しっかり終了させてから再度立ち上げてください。

Q2:カレンダーへ登録したが1日ずれています。
A2:調査中ですが、自分環境で発生しないため確認が出来ておりません。

Q3:同じユーザが同じ日に複数日登録されます。
A3:登録先のカレンダーが同じものであるか確認して下さい
同じであった場合、Q2と同じようにタイムゾーンを確認して下さい。

■現在の不具合/要望 の調査状況 (上から優先度高)
・連絡帳に誕生日登録したら自動的に登録して欲しい。
・登録件数が600件以上で強制終了する。
・誕生日になると携帯の待ち受け画面上に表示。
・カレンダーにアイコンを表示して欲しい。
→カレンダーがアイコン対応していない…?

■過去のVersionUp内容
[2011/05/08]ver.1.4.0
・誕生日/記念日が、生まれた年/記念年から登録。
VerUp後、再度登録しなおした場合、
最初の1回は、同日に同じ人物が複数登録される場合があります。
上記の使用方法3に従い、一旦登録情報の完全消去を行ってください。
・登録年数の年数の選択の廃止。毎年固定。
・設定画面の追加。
・登録済みの誕生日/記念日情報の完全消去機能の追加。

[2011/04/08]ver.1.3.2
ver.1.3.1の修正内容が反映されていないのを修正。

[2011/04/08]ver.1.3.1
以下の不具合を修正しました。
→誕生日の登録形式が「2000-01-01」以外の場合、強制終了する可能性がある。
※「20000101」や「 2000-1-1」だった場合強制終了していました。
なお、表示不可能な登録形式の場合、強制終了されないようにしましたが、
誕生日が登録されていても、一覧に表示されません。

[2011/02/24] ver.1.3.0
・タブ表示にて「誕生日順/年齢順/名前順」のソートの切替
・年齢に「歳」、記念日に「周年」を追加

■お願い
不具合があった場合、報告いただければ出来る限り早急に対処致します。
そのとき、アプリで強制終了があった場合、「レポートを送信する」と
あるかと思います。
そちらを送っていただきますと、解析の助けになります。
ユーザ様の個人情報等は分かりませんので、送っていただければ幸いです。

もし、上記以外お困りの点があれば、コメントもしくは、
マーケットからメールお願い致します。

今後とも宜しくお願いいたします。

2011年2月24日木曜日

[memo]修正→リリースまでのコマンド

完璧自分用メモ。ソース修正からリリースまでのコマンド。

■githubコミット用
 git status               //一旦更新確認
 git add .                 //変更(追加)があるもの全て
 git rm 消去するファイル名        //変更(削除)があるものファイル名指定
 git status               //もっかい確認して漏れがない確認
 git commit -m "更新メモ"
 git push origin master

■署名用
 jarsigner -verbose -keystore 〜.keystore 〜.apk 〜  //〜は自分の環境ではアプリ名とか。
   キーストアのパスワードを入力してください:  //上記コマンド後の出力 文字化けしてみえない。
   アプリの鍵パスワードを入力してください:   //上と同じく。

■zipalign実行用 
 作成先に前回の.apkファイルがあったら削除する。
 zipalign -v 4 〜.apk ../別フォルダ/〜.apk    //出力元と先の.apkが同じだったので別フォルダに出力

Eclipseで「Export Signed Application Package...」を選択してれば、
署名とzipalignは自動的にしてくれる。

2011年2月22日火曜日

[android]TabLayoutを縦に並べたい!

Tab表示をする方法は「TabHost、TabWidget」を使う。

@yanzmさんの解説を参照しました。

Tab実装方法は
1、Viewをtab毎に用意する方法
2、ActivityをintentでTabActivityに設定する方法
があるらしいです。

で、とりあえず自分のアプリに組み込んで、それを動かしてみました。






それっぽい!
でも、出来れば横向きにしたとき、Tabを右側に縦表示したい。

ここからが本題で、
このTabWidgetはどうやら縦設定にすることが出来ない。
じゃあどうするのかというと、
Tab表示を諦める!

諦めるというか、TabHostやTabWidgetでの実装ができないので、
似た様なものでTab表示を実装する、という結論になりました。
※ホントは出来たりするのかも?

やり方は、ImageButtonを使う方法にしました。
@t2lowさんのサンプルコードを参考にさせていただきました。

■TabTest.java
public class Tabtest extends Activity implements Runnable, OnClickListener {
    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.main);
        gridView = (GridView) findViewById(R.id.list);

        …中略…

        int[] tabs = { R.id.tab1, R.id.tab2, R.id.tab3 };
        for (int tab : tabs) {
            View v = findViewById(tab);
            v.setOnClickListener(this);
        }
    }

    public void onClick(View view) {
        switch (view.getId()) {
        case R.id.tab1:
            hogehoge(); //リストデータ読み込み+表示
            break;
        case R.id.tab2:
            hogehoge(); //リストデータ読み込み+表示
            break;
        case R.id.tab3:
            hogehoge(); //リストデータ読み込み+表示
            break;
    }

    private void hogehoge() {
        …中略…
    }
}

■layout/main.xml 縦向きの時に表示
  
  
      
  
          
  
      
  
      
  
          
  
          
  
          
  
      
  

■layout-land/main.xml 横向きの時に表示

  
  
      
  
          
  
              
          
          
  
          
  
              
  
              
  
              
  
          
      



で、その出力結果がこうなりました。



なんかごちゃごちゃしちゃってあんまりキレイじゃない…
でも、横画面のときのTab表示が縦にするのは解決しました。

【2011/4/4 追記】
@yanzmさんが横タブの方法についてちゃんと記載されています。
Y.A.M の雑記帳:Android タブをサイドにする

これ見ると、自分の記載が恥ずかしい。

2011年2月14日月曜日

androidの会 町田支部で発表してきました。

Androidの会の町田支部で発表してきました。
内容的には、開発初心者がどうやってアプリ作るまでに至ったのか、と
アプリ作って困ったところとか。

20110213 android_machida yakisoba_yuki

2011年1月13日木曜日

[android][AR]QualcommのAR SDKのサンプル動かしてみたよ。

ARをいじってみたいなぁ、と思ったので、紹介されていたQualcommのAR SDKを入れてみました。
ところどころ詰まったので、自分用にメモ。

こちらのサイト様を参考にしました。ありがとうございます。
http://d.hatena.ne.jp/kotamz/20101031/1288534811

1.まず以下のインストール。
 ・Android SDK/NDK

 自分はSDKは入ってたので、NDKだけインストールしました。
 現在の最新版は、Android NDK r5
 適当にインストールしてパスを通して完了。

2.次にQualcommのサイトにて、SDKをダウンロード
 https://ar.qualcomm.com/qdevnet/sdk

 現在のバージョンは qcar-sdk-0.10.0.zip
 
 上記の右上にLoginがあるので、そこから新規登録の必要あり。
 (なぜか間違えて、//developer.qualcomm.com/dev/androidから登録したら、
 Developper用のアカウントになってAR SDKは落とせなかった。なんてこった。)
 
3. DSOのコンパイル
 ダウンロードしたら、Android NDKでコンパイル。
 
 ※qcar-sdk-0.10.0だと、Sharedってフォルダはなくて、
  代わりに以下になってた。
  $ CD /Users/ユーザ名/Development/Android/qcar-sdk-0-10-0/
   samples/Dominoes

 で、Android NDKでコンパイルするんですが、
  $ ndk-build
 としたところ、以下のエラーが出ました。
  cannot find -lQCAR

 調べてみたら、MACだと変更しないといけないところがあるらしいです。
 以下のサイト様に解決方法が載ってました。
 http://kopanitsa.seesaa.net/article/178887188.html

 Android.mkの中身を書き換えて、再度 $ ndk-build したところ、
 今度は正常にコンパイルできました。

4.Eclipseで実際に動かしてみる。
 参考のサイト様では、Androidの新規プロジェクトを作成していますが、
 インポートすることでサンプルを読み込むことが出来ます。

 Eclipseで以下をインポート
 /Users/ユーザ名/Development/qcar-sdk-0-10-0/samples/Dominoes
 
 MACの場合インポートしたあとに、
 Dominoesのプロジェクトを右クリック->プロパティー->ビルダーで、
 Import QCAR(win)のチェックを解除し、Import QCAR(bash)をチェックする。
 
 プロジェクト > クリーン で実行。
 この時に、一旦エラーが出てたましたが、クラスパスに
 QCAR_SDK_ROOTという変数を追加したらちゃんと動くようになりました。
 
下がドミノを動かしてみたところです。