ラベル android の投稿を表示しています。 すべての投稿を表示
ラベル android の投稿を表示しています。 すべての投稿を表示

2013年2月28日木曜日

超AndroidユーザーがiPhoneを買ってみた

ついにiPhoneを買いました。キャリアはauです。 

いまつかってるGalaxy Nexusがバッテリーも半日しか持たないし、 (電池パックかえればいいんですけどね。)
しかもなんだか最近思いし、よくアプリが落ちるようになってしまったので、 ちょっと使い倒し過ぎかなと思い買い替えを検討してました。
ただ、基本的にAndroidはNexusシリーズしか正直欲しくないしー、と思っていたので、
もう思い切ってiPhoneにしてしまおうと思った次第です。

 感想としては

  • スクロールの早さとかフィードバックの早さとか超ハンパない!
  • バックキーを押す習慣があるので、バックキーがないのが慣れない
  • キーボードが慣れない
  • UIが全般的に違うので、一瞬考えることが多い
なにかあったときにとりあえずバックキーで元の状態に戻すのがAndroidユーザーの基本的な行動だと思うのですが、
何かあった時はホームボタンになってしまうので、ホームに戻って一瞬戸惑ってしまいます。

キーボードはATOKが個人的に使いやすかったので、そこがかわっちゃうとテキスト入力が全般的に使いづらくなっちゃう。


AndroidからiPhoneに買い替えた人、みんな戸惑うんじゃないでしょうかねー。

個人的にはiPhoneユーザとAndroidユーザのUXは根本的に違うということが
身をもって体験できたのは収穫でした。

慣れればすごく使いやすいんでしょうけどね、iPhone。


2011年8月7日日曜日

第1回Androidテスト祭り に行ってきました。

第1回Androidテスト祭り に行ってきました。
行ってきましたと言っても、途中から実行委員にまぜてもらったので、
スタッフとして参加させていただきました。

ATNDの参加希望者が定員の倍以上になってしまい、
Androidでの品質の確保については、たくさんの人が関心を持っているのだと思います。
(困っている人が多いってことですね><) 今回の発表は非常にレベルが高く、 参加していただいた方々の満足度も高かったのではないかと思います。 個人的には、尾上さんの「テスト可能なUI設計パターン」 が勉強になりました。 ちなみに、僭越ながら私も懇親会でLTをしてきました。 スライドは下記になります。
講演者の皆様、ご来場していただいた皆様、Ustreamを視聴していただいた皆様、本当にありがとうございました。

2011年6月14日火曜日

ATECで発表してきました。

大分前になってしまいますが、
ATEC(Android テスト部)で発表してきました。

ATECでやっているテストをつくるためのAndroidアプリである
testterに関してです。
@nowsprintingさんと共同でやってきました。

以下がプレゼン資料です。


@nowsprintingさんの資料も下記に載せておきます。


もし興味がある方は、是非、ATECにご参加ください。
https://sites.google.com/site/androidtestclub/

2011年1月13日木曜日

[android]Adapterって何?

Androidでは
ListViewやGallery等で
ArrayAdapterのようなXXXAdapterというものを使用しますが、
このAdapterとは、いったい何なんでしょうか?

AdapterというのはViewとデータの橋渡し役で、
Viewに必要なデータを渡してあげる役割があります。
例えば、
getCount()は、Viewに必要なitemの数、
getItem()は、対応するObjectを返す関数です。
getViewは、Listのアイテムのように、それぞれのitemに対応するView
を作って返します。

以下は、AKB48の総選挙の結果を7位までリスト表示するプログラムです。

HelloListActivity.java

package jp.android.hellolist;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;

public class HelloListActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        ListView view = (ListView)findViewById(R.id.list_view);
        HelloListAdapter adapter = new HelloListAdapter(this);
        view.setAdapter(adapter);
    }
}

HelloListAdapter.java

package jp.android.hellolist;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class HelloListAdapter extends BaseAdapter {
    private LayoutInflater inflater;
    private AKBData data;

    public HelloListAdapter(Context context) {
        inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        data = new AKBData();
    }

    @Override
    public int getCount() {
        return data.getSize();
    }

    @Override
    public Object getItem(int position) {
        return data.getItem(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.list, null);
            TextView tv1 = (TextView)convertView.findViewById(R.id.TextView01);
            tv1.setText(Integer.toString(position + 1));
            TextView tv2 = (TextView)convertView.findViewById(R.id.TextView02);
            tv2.setText(data.getItem(position));
        }
        return convertView;
    }

}

AKBData.java

package jp.android.hellolist;

import java.util.ArrayList;

public class AKBData {
    private ArrayList list;

    public AKBData() {
        list = new ArrayList();
        list.add("大島優子");
        list.add("前田敦子");
        list.add("篠田麻里子");
        list.add("板野友美");
        list.add("渡辺麻友");
        list.add("高橋みなみ");
        list.add("小嶋陽菜");
    }
    
    public int getSize() {
        return list.size();
    }

    public String getItem(int index) {
        return list.get(index);
    }
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<ListView  
 android:id="@+id/list_view"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    />
</LinearLayout>

list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
 android:id="@+id/LinearLayout01"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="horizontal"
 xmlns:android="http://schemas.android.com/apk/res/android">
 <TextView 
  android:text="@+id/TextView01"
  android:id="@+id/TextView01"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_marginRight="10dip" />
 <TextView
  android:text="@+id/TextView02"
  android:id="@+id/TextView02"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" />
</LinearLayout>

実行結果

2011年1月10日月曜日

[android]androidのアプリをHTMLで作れるようにする

androidのアプリケーションから
ローカルに保存してあるHTMLを表示させるアプリのサンプルを作ってみました。
WebViewのaddJavascriptInterface()をつかえば、
Javascript から Androidのメソッドを呼び出すこともできます。

ローカルにおくためのHTMLは、
assetsフォルダに保存しておけば、file: でアクセスできます。
(assets/index.htmlだったら、file://android_asset/index.htmlでアクセスできる)

サンプルです。
HelloHTMLActivity.java

package jp.android.hellohtml;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Vibrator;
import android.util.Log;
import android.webkit.WebView;
import android.widget.Toast;

public class HelloHTMLActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        WebView wv = new WebView(this);
        wv.getSettings().setJavaScriptEnabled(true);
        MyJSObj jsobj = new MyJSObj(this);
        wv.addJavascriptInterface(jsobj, "myobj");
        setContentView(wv);
        
        wv.loadUrl("file:///android_asset/index.html");
    }
    
    class MyJSObj {
     private Context context;
     
     public MyJSObj(Context c) {
      this.context = c;
     }
     
     public void showToast(String str) {
      Log.d("tag", str);
      Toast.makeText(context, str, Toast.LENGTH_LONG).show();
     }
     
     public void vibration() {
      Vibrator vibrator = (Vibrator)getSystemService(VIBRATOR_SERVICE);
      vibrator.vibrate(2000);
     }
    }
}
addJavascriptInterface()は第1引数はjavascriptにバインドしたいオブジェクト、
第2引数はjavascriptでアクセスするオブジェクトの名前を指定します。

今回は、MyJSObjのメソッドにアクセスできるようにします。
showToast() はただのtoastの表示、
vibration() は2秒間振動します。

Vibratorを使うときは、
android.permission.VIBRATE
の設定を忘れずに。

index.html

<html>
<head>
<title>test content</title>
<script type="text/javascript">
  function showText() {
    myobj.showToast("test");
  }
  function vibration() {
    myobj.vibration();
  }
</script>
</head>
<body>
<div>hello</div>
<input type="button" value="toast" onclick="showText();" />
<input type="button" value="vibe" onclick="vibration();" />
</body>
</html>

実行結果

実行結果はただのHTMLですが、
toastをクリックすればtoastがでて、
vibeをクリックすれば、きちんと2秒間振動することを確認しました。

2010年11月9日火曜日

日本Androidの会11月の定例イベントに行ってきました。

日本Androidの会11月の定例イベントに行ってきました。
簡単にレポートします。

SHARP Androidモデルのご紹介とタッチ&トライ

今回はタッチ&トライということで、
au/Softbank/docomo 3キャリアの端末を実際に触らせてくれました。
感想としては、

  • 液晶きれー
  • 3Dスゲー

ってとこですかw

いや、3つともすごいいい機種です。
液晶はWVGAで、とてもきれいでした。

UI(ホームスクリーンとかメニューとか)はAndroid標準からはちょっといじっている
感じでした。
起動中のアプリ一覧も画面の右下のアイコンをタップすれば一覧みれますし。
3キャリアとも若干の違いはあるけど、ほとんど同じもののようでした。

SoftBankとdocomoは3Dに対応していていましたが、
本当に3Dに見えました。
カメラも3Dに対応していて、撮った写真を3Dにできます。
撮るときにすこしだけ、カメラを右に動かすようにして撮ります。
今までの2Dの画像も3D化できるとのこと。
正直、3Dの動画やゲームをみるのは、いいけど、
カメラとか3Dは必要ないんじゃないかと個人的には思います。
SoftBankの携帯、ホームスクリーンとかメニューとか3Dにできたけど、若干気分悪くなりましたw
あと、3Dの拡張APIもあって、それの公開も検討しているそうです。
正直アプリ開発には必要ないかな。ほかの端末で動かないなら意味ないし。

あとは、いわゆるガラケーの機能(ワンセグとかFelicaとか)
をほとんど持ってきているので、
メインの電話機として十分活躍できそう。
(オープンのプラットフォームでFelicaを載せたのはすごい!)
ガラケーを買い替えようとしているけど、ガラケーの機能も必要という人は、
ぜひシャープ端末をお勧めします。

気になったのは、同じメーカーなのに、3キャリアともだいぶ違う端末にだったこと。
やっぱりそれぞれのキャリアの要求/仕様にあわせて作り込間なくちゃ行けないのかなと思いました。
同じ端末を3キャリアで出せればいいのに(><)

詳しくは、それぞれの端末のページを見てください。



Javaだけじゃない!Adobe AIRで作るAndroidアプリ話

AIRでAndroidのアプリを作ろうぜ!っていう話。

  • AIR2.5 にはAndroid向けにも対応していて、PCやSmart Phoneといったでこでも動かせるアプリを作ることが可能
  • Smart Phone には、AndroidとiOSとBlack Berryに対応している
  • Android向けでも、実行環境はAndroidマーケットでダウンロード可能で、AIR環境がない場合でも、AIRアプリが自動的にAndroidマーケットに誘導
  • Adobeのクロスプラットフォーム戦略として、AIRであれば、ソース共有/再利用ができるので、様々なプラットフォームに対応するコストがグンと下がる


とのことです。
以下、聞いたときのメモをそのまま載せます。
* AIR for Android 開発
-Flash ActionScript
-- 自由度の高いUIコンテンツ作成が可能
--  デザイン指向 
- Flex (ActionScript +MXML)
-- Flashのフレームワーク
-- ビジュアルコンポーネントがそろっている
--- タグで書くだけでFlashUIが作れる
-- Web(Flash)とDesktop(AIR)に対応
-- 次期バージョンではモバイル対応
-- 画面遷移機構もフレームワークも提供
--- 開発が簡単になる
- 開発ツール
-- Flash Builder (Burrito)
--- EclipseベースのIDE
--- preview 制限なし
--- AirSDK/Flex SDK ドウホウ
- 基本構造
-- ルートタグ
-- ViewNavigator
--- MobileApplicationに一つ
--- ビューコントロールを対応
--- データキャッシュ対応
-- View 
-- 一つの画面表示

ぶっちゃけ、シャープ端末を触るのに夢中で開発のデモをあんまりみれなかったのですが(ごめんなさい><)
XMLで見た目を書いて、動作をActionScriptで書くといった感じでしょうか。
個人的には、クロスプラットフォームを実現するんであれば、
HTML5の方がいいんじゃないかなーと思っています。
あれも、要はブラウザがあればどの環境でも動く訳だし。

AIRも結局、プロファイルにあわせて動作をかえなくちゃいけない訳だし、
画面サイズによってレイアウトが崩れる問題も解決できなさそうなので、
クロスプラットフォームって点では微妙な印象です。
でも、FlashやASが得意な人はいいかもしれません。

NEC Life Touch


これ http://www.nec.co.jp/solution/spfsl/cloud/communicator/

こういったデバイスを使って何かのソリューションを提供するんだったら、
利用するならのは手かもと思いました。
アプリ開発者としては、ちょっと。。。
アプリをこのデバイスにサクッと載せられるのならばいいのかもしれないけど。。。

ということで、ざっとですが以上です。

2010年4月4日日曜日

[android]SurfaceViewのサンプルプログラミング

SurfaceView は UIスレッドとは別のスレッドで描画を行えるViewです。

サンプルプログラムを書いてみました。

package jp.android.hellosurfaceview;

import android.app.Activity;
import android.os.Bundle;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Color;
import android.view.SurfaceView;
import android.view.SurfaceHolder;

public class HelloActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        HelloSurfaceView surface = new HelloSurfaceView(this);
        setContentView(surface);
    }
}

class HelloSurfaceView extends SurfaceView 
    implements SurfaceHolder.Callback, Runnable {
 private SurfaceHolder holder;
 private Thread mainLoop;
 
 public HelloSurfaceView(Context context) {
  super(context);
  holder = getHolder();
  holder.addCallback(this);
  holder.setFixedSize(getWidth(), getHeight());
 }
 
 @Override
 public void surfaceDestroyed(SurfaceHolder holder) {
  mainLoop = null;
 }
 
 @Override
 public void surfaceChanged(SurfaceHolder holder, int format,
    int width, int height) {
  mainLoop = new Thread(this);
  mainLoop.start();
 }
 
 @Override
 public void surfaceCreated(SurfaceHolder holder) {
 }
 
 @Override
 public void run() {
  while (mainLoop != null) {
   Canvas canvas = holder.lockCanvas();
   Paint paint = new Paint();
   paint.setColor(Color.BLUE);
   paint.setStyle(Paint.Style.FILL);
   canvas.drawRect(100, 100, 200, 200, paint);
   holder.unlockCanvasAndPost(canvas);
  }
 }
}

いろいろググって参考にしましたが、
SurfaceViewを勉強するなら以下が勉強になると思います。
SurfaceViewならAndroidで高速描画ゲームが作れる 
http://www.atmarkit.co.jp/fjava/rensai4/android12/android12_1.html

2010年3月27日土曜日

[android]Android ndk をいじってみる

メモです。

とりあえず、ここからndkを落としてきます。
http://developer.android.com/intl/ja/sdk/ndk/index.html


あとは、下記を参考にして、ビルドします。
http://d.hatena.ne.jp/bs-android/20090707/

気をつけなければいけないのは、Cファイル(hello-jni だったら、hello-jni.c)を書き換えたら、

make APP=hello-jni

のように、makeを通し、EclipseもF5を押してRefrechしてからビルドしないといけません。ここを忘れてはまりました。

2010年3月21日日曜日

[android]AndroidでWebページを表示する方法

AndroidでWEBページを表示する方法

1.マニフェストファイルに以下を追加
<uses-permission android:name="android.permission.INTERNET"&rt;</uses-permission&rt;

2.コードを以下のように記述

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;

public class HelloWebkit extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        WebView webView = new WebView(this);
        webView.loadUrl("http://www.yahoo.co.jp");
        setContentView(webView);
    }
}
たぶんこれでOK