2010年11月12日金曜日

アルバムに写真を追加する


1.パソコンでアルバムを作成しておく。(事前準備)

2.写真閲覧ソフトから「共有」をする。(ケータイから)
(例:Mediascape)
 
(例:アストロファイルマネージャー)

3.「アプリケーションを選択」でMixiPhotoRoomを選択。

4.写真を登録するアルバムを選択する

5.タイトルやら、回転やらを選択して「登録」
 

6.しばらくすると通知がきます。
 

これで写真の登録ができました。

2010年11月11日木曜日

MixiPhotoRoomの使い方

アルバムに写真を追加する


日記で写真を使う(準備中)





MixiPhotoRoom

Xperiaアップデート Android2.1


全体的にモッサリ感も少なくなりました。

個人的には
  Shareしてからアプリ一覧を表示するまでの時間が短くなった、のと
  Activityのアニメーションがマトモに表示されるようになった、のが
一番嬉しかったな。

Mediascapeと連絡先は気持ち軽くなった気もするけど、
まだまだ重たい。Timescapeは動かしてもいない。



そんなわけで、Xperiaもそれなりの端末になりました。
ボタンが黒っぽいのが気になるけど・・・

※おまけ
せっかくなのでベンチマークを取ってみた。

1.6
 

2.1

浮動小数点演算のスコアがものすごく上がっとる

2010年10月27日水曜日

MixiPhotoRoom 10000ダウンロード突破


アプリケーションを公開して4ヶ月とチョット経ちました。
mixi公式でフォトアルバム関連の対応をして、Xperiaで使えるように
なるまでは保守していこうと思います。

とはいえ、公式がAndroidの専用アプリを作るとは思えない。
そうなるとmixi Touch(ブラウザ)での対応になるわけですが、Xperiaは
Flashも使えないし、ブラウザからのファイルアップロードも出来ないので
技術的に対応不可なわけですが。。。


2010年10月20日水曜日

MixiTouchがもっともっと使いやすく

微妙にバージョンアップしています。

フォトアルバムのスマートフォン用画面が出来ました。



日記の本文も、改行にあわせて伸びるようになっています。
伸ばし過ぎるとスクロールしづらくなりますが、端を触れば動かせます。
 

相変わらず、フォトアルバムボタンやら絵文字ボタンはありません。
Androidならマッシュルームで解決ですが、iphoneとかどうなんだろ?
専用アプリが主流?


iphoneがFlashに対応したりAndroid2.2が主流になれば、
写真のアップロードも対応してくれるんだろうけど、
AndroidはXperia(1.6)が売れてるみたいだし、まだまだ先かな。

てか2.1・・・

MixiPhotoRoomバージョンアップ(1.2.2)

MixiPhotoRoomをバージョンアップしました。

今回は性能改善だけで機能追加はありません。
通信中ダイアログ(ぐるぐる廻っているやつ)の表示時間が
少しだけ短くなっているはず。


PC用のHTMLパーサーだと処理が重たいようで、
1つのHTMLで1~2秒ぐらい使っていた。

今回はHTMLの必要な部分(アルバムのliタグの部分だけとか)を抽出してから
パーサーに渡すことで処理時間を短縮することに。
それでも0.5秒とかは使ってる。

これ以上の速度向上はめんどくさそうなので諦め。

Android2.2になれば早くなるかなー?

IS05欲しい

2010年9月29日水曜日

MixiPhotoRoomバージョンアップ(1.2.1)

MixiPhotoRoomをバージョンアップしました。

URLの選択が出来るようになりました。
Mixiボイスで使えます。

手抜きな感じですが、使い方。



写真へのURLをつぶやけたら便利そうだと思って作ったんですが、
ちゃんと画像として表示されました。

しらなかったよ。

2010年9月21日火曜日

Intentを受け取るアプリケーションを必ず選択したい場合


ブラウザのように「常にこの操作で使用する」にチェックが付いているけど、
必ずアプリ選択画面を表示させたい場合は、Intent.createChooserを使います。

こんな感じ

ブラウザの選択ダイアログの表示

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.google.co.jp/"));

Intent chooser = Intent.createChooser(intent, "ブラウザの選択");
startActivityForResult(chooser, REQUEST_CHOOSER);

onActivityResultで選択結果の受け取り
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_CHOOSER:
if (resultCode == RESULT_OK) {
Intent intent = (Intent) data.getExtras().get(Intent.EXTRA_INTENT);
if (intent != null) {
startActivity(intent);
}
}
break;
default:
break;
}

finish();
}

2010年9月2日木曜日

SPモードメール

ユーザーレビューが大変なことになっていたので
SPモードを契約してきました。

「通話中にメール受信すると電話が切れる」って
レビューが気になっていたんだけど確認できず。

残念。


自分が気になったのはメール受信ウィンドウが表示されること。


ブロードキャストレシーバーからActivityを起動するのは
やっちゃいけないことの一つですね。

設定でウィンドウを表示しないように出来ますが、メール受信音が消えました。
※メール設定>受信時動作設定のチェックを外す。

あとは予想以上に重たかった。
「アプリが応答していません」ってOSから怒られるレベルはチョット。。。

結構バグもありそうな感じ。

2010年7月28日水曜日

MixiTouchがもっと使いやすく

いつのまにやらバージョンアップしてました。

---対応機能----------------
ログイン
ホーム表示機能(自分・友人)
日記、日記投稿機能
mixiボイス、つぶやき、イイネ!・コメント機能
メッセージ
マイミク一覧
プロフィール機能
プロフィール検索機能
足あと機能
運営からのお知らせ機能
-------------------

私の記憶だとサービス開始時に「メッセージ」「マイミク一覧」はありませんでした。


「メッセージ」画面はこんな感じになってます。
※受信箱
結構いいんじゃないですか?

※メッセージ作成
相変わらずメッセージ欄が小さいですね。


今後のバージョンアップにも期待しています。
スマートフォンユーザーにとってMixiがもっと使いやすくなるといいですね。

四の五のはMixiTouchを応援しています。

2010年7月14日水曜日

IS01(JN-DK01)のエミュを入れてみた

コレハヒドイ



Xperiaでも横にするとひどいことになっていたのでなんとなく予想してたけど・・・

HT-03AはN1と同じ解像度だと思っていたけど、これも違った。


そんなわけで、白い画面に変更中。


このあたりがAndroidの辛いところ。
解像度固定なWindowsPhone7が羨ましい。

2010年7月8日木曜日

EditTextの初期表示に薄く文字を表示させるアレ

MixiPhotoRoom1.1.6をリリースしました。

タイトル的なコメントを入力できるようにしました。
(タイトル的なコメントはこれだと信じたい・・・)


EditTextの初期状態で文字を表示させる方法がわからなかったのでメモ。

レイアウト.xmlで


<EditText android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:inputType="text"
android:hint="@string/str_title_comment"
android:id="@+id/edt_comment">
</EditText>


のようにandroid:hintに設定してやればOK


↓こんな感じで表示される



2010年7月7日水曜日

Intentで受け取るURI

MixiPhotoRoom1.1.5リリースしました。

アストロから写真が登録できないとコメントがあったので対応。

1.1.2までは登録できてたんですが、1.1.3の対応ですっかり忘れていた。


以下プログラムの説明

SENDインテントで画像を受け取ったときに、Fileスキーマ(file://~)で受け取る場合と
Contentスキーマ(content://~)で受け取る場合があるので、注意が必要。

AndExplorerとかだと
 デバイス>写真(~)から選択した場合はContent
 SDカード>ファイル選択の場合はFile

↓みたいに振り分ける



Bundle extras = getIntent().getExtras();
if (extras != null) {
Uri uri = (Uri) extras.get(EXTRA_URI);
String scheme = uri.getScheme();
if ("file".equals(scheme)) {
//file://~の場合
} else if ("content".equals(scheme)) {
//content://~の場合
}
}


2010年7月6日火曜日

AnimationDrawable

ロード中の画像みたいにクルクル回したい場合はAnimationDrawableを使う。
(ゲームのスプライトアニメーション的なやつ)

【アンドロイドSDKインストールディレクトリ】\platforms\android-4\data\res\drawable\ic_popup_sync.xml
あたりを参考に。

ic_popup_sync.xml
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/ic_popup_sync_1" android:duration="200" />
<item android:drawable="@drawable/ic_popup_sync_2" android:duration="200" />
<item android:drawable="@drawable/ic_popup_sync_3" android:duration="200" />
<item android:drawable="@drawable/ic_popup_sync_4" android:duration="200" />
<item android:drawable="@drawable/ic_popup_sync_5" android:duration="200" />
<item android:drawable="@drawable/ic_popup_sync_6" android:duration="200" />
</animation-list>

android:durationを小さくすれば早く画像が切り替わる。


Activity抜粋

AnimationDrawable d;
private ImageView imgView;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imgView = (ImageView) findViewById(R.id.ImageView01);
d = (AnimationDrawable) getResources().getDrawable(android.R.drawable.ic_popup_sync);
imgView.setImageDrawable(d);
}

@Override
public void onWindowFocusChanged(boolean hasFocus) {
if (hasFocus) {
d.start();
}
}
onWindowFocusChangedとかでstartするのがポイント。
onCreateとかonResumeでstartさせてもアニメーションしてくれない。

詳しくは

2010年6月27日日曜日

Httpclient MultipartRequestでContent-Lengthヘッダが消えた件

原因はInputStreamBodyらしい。
InputStreamBodyのgetContentLength()は必ず-1を返却しているようなので
オーバーライドしてファイルサイズを返却するように修正。

修正前:
entity.addPart("file", new InputStreamBody(stream, "application/octet-stream", fileName) ;

修正後:
entity.addPart("file", new InputStreamBody(stream, "application/octet-stream", fileName) {
@Override
public long getContentLength() {
return fileSize;
}
});


リファレンスに説明あるんだろうな・・・。

2010年6月26日土曜日

MixiPhotoRoomバージョンアップ(1.1.0)

MixiPhotoRoomをバージョンアップしました。
写真の追加が出来るようになりました。

※基本的な使い方は前回のエントリーを御覧ください


<写真の追加>
1.MediaScapeで画像を表示して、メールアイコンを選択。
 ※MediaScape以外の画像表示アプリでも、共有ボタンがあれば使えます。

2.MixiPhotoRoomを選択

3.写真を追加するアルバムを選択。

4.必要なら写真を回転させます。

5.登録ボタンを押して、写真のアップロードを開始します。
 ※この段階では写真は追加されません。


6.実際に写真の追加が終わると、通知が表示されます。
 ※この通知を選択するとMixiの日記投稿画面を表示します。

2010年6月8日火曜日

MixiPhotoRoomを公開しました

写真の登録機能も予定していましたが
このタイミングで公式がアップデートしてしまったので、
マッシュルーム機能だけの公開になりました。

Xperiaで開発しているのでわかりませんが
もしかしたらHTC-03Aではアプリが重たいかもしれません。


<使い方>
1.投稿画面でマッシュルームを起動。

2.MixiPhotoRoomを選択

3.初回はログインEメール、パスワードを入力します。

4.ログインするとアルバムの一覧を表示します。
※1 新フォトアルバムを表示したい場合は、メニューから「新フォトを表示」を選択してください。
  

※2 ページの切り替えは、真ん中のボタンでもできます。

5.写真の一覧が表示されるので、写真とサイズを選択してください。
  

6.投稿画面にタグが入力されます。



公式だけでなく、TkMixiViewerなどでも使えます。


2010年6月6日日曜日

EasyMock expect実行時にIllegalArgumentError

-------------
※EasyMockはstatic import

ソース:
expect(sp.getString("USER_ID", (String) anyObject())).andReturn("ユーザーID");

エラー:
java.lang.IllegalStateException: 2 matchers expected, 1 recorded.
-------------

第一引数に文字列、第二引数にanyObjectを指定しているのが原因らしい。
↓のように書くと動作する。

-------------
ソース:
expect(sp.getString(eq("USER_ID"), (String) anyObject())).andReturn("ユーザーID");
-------------

2010年6月5日土曜日

Android JUnit Testでエラーになる件

Android JUnit実行時に

 「Test run failed: 【テストクラス名】」

となること3時間。

やっと解決。

元プロジェクトと、テストプロジェクトのパッケージが同じだったのが原因。
(AndroidManifest.xmlのmanifestタグのpackage属性)

テストプロジェクトのパッケージパスの最後に「.test」を追加したら解決した。

ふー。

2010年5月26日水曜日

更新のMenuIcon

android.R.drawableには無いんだけど、[AndroidSDK]/platforms/android-1.6/data/res/drawableフォルダにはic_menu_refresh.pngってのが存在している。


謎だ。


仕方がないのでpngファイルを自分のワークスペースにコピーして使用。



無事表示できたんだけど、グラデーションしてくれない。
GMailアプリとかも同じだからこういうものなのか?
画像の問題?

2010年5月25日火曜日

OptionMenuの表示

こんな感じのメニューを作成
  

[menu.xml]
<menu android="http://schemas.android.com/apk/res/android">
<item title="menu01" id="@+id/menu01"></item>
<item id="@+id/menu02" title="menu02" icon="@android:drawable/ic_menu_more">
<menu>
<item checkable="false" title="item01" id="@+id/item01"></item>
<item checkable="true" title="check01" id="@+id/check01"></item>
<group id="@+id/group01" checkablebehavior="all">
<item id="@+id/check02" title="check02"></item>
<item title="check03" id="@+id/check03"></item>
</group>
</menu>
</item>
<item title="メニュー3" id="@+id/menu03" titlecondensed="menu03" icon="@android:drawable/ic_menu_more">
<menu>
<group checkablebehavior="single" id="@+id/group02">
<item id="@+id/select01" title="select01" checked="true"></item>
<item title="select02" id="@+id/select02"></item>
<item id="@+id/select03" title="select03"></item>
</group>
</menu>
</item>
</menu>

・GroupのcheckableBehaviorをall→チェックボックス
・GroupのcheckableBehaviorをsingle→ラジオボタン
・checkableBehaviorの設定した場合は、子Itemのcheckableを設定しない。
・親ItemのtitleとtitleCondensedを設定すると、メニューの名前(ここだとmenu03)とサブメニューのタイトル(メニュー3)に異なる文字を表示できる。

※階層はこんな感じ

[Activity.onCreateOptionsMenu]
  @Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.option_menu, menu);
return true;
}

[Activity.onOptionsItemSelected]
  @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.check01:
case R.id.check02:
case R.id.check03:
if (item.isChecked()) {
item.setChecked(false);
} else {
item.setChecked(true);
}
return true;
case R.id.select01:
case R.id.select02:
case R.id.select03:
item.setChecked(true);
return true;
}

return super.onOptionsItemSelected(item);
}