2011年4月23日土曜日

ストリートビューを表示する

ストリートビューで任意の場所を表示するには、以下のように指定します。


            // Launch StreetView
            Intent intent = new Intent("android.intent.action.VIEW", Uri.parse("google.streetview:cbll=35.710883,139.796321&cbp=1,0,,45,1"));
            startActivity(intent);

cbll=に続き、経度、緯度を指定し、cbp=に続けて、1,北からの時計回りの角度,,水平から+−90度の角度,1と指定します。

他のActivityを起動

Androidは他のアプリを起動するのに「startActivity」を使います。
Intentに任意のUriを指定してstartActivityを呼び出せば、それに会わせたアプリが自動的に起動されます。

例えば、以下では電話をかけるアプリを起動します。

            // Phone call
            Intent intent = new Intent("android.intent.action.DIAL", Uri.parse("tel:0312345678"));
            startActivity(intent);


以下は、ブラウザを起動する例です。

            // Launch Browser
            Intent intent = new Intent("android.intent.action.VIEW", Uri.parse("http://www.google.com"));
            startActivity(intent);


以下は、地図を表示する例です。

             // Launch map
            Intent intent = new Intent("android.intent.action.VIEW", Uri.parse("geo:35.710883,139.796321?z=20"));
            startActivity(intent);

geo:に続けて、経度と緯度を指定し、z=で拡大率を1〜23の間で指定します。
拡大率は1が地球全体で、2で2の2乗拡大、3で2の3乗拡大と続きます。
また、「geo:0,0?q=地名」と指定すれば、地名検索が行われます。


以下は、メーラーを起動する例です。

             // Launch Mailer
            String subject = getString(R.string.subject);
            String message = getString(R.string.message);
            Intent intent = new Intent("android.intent.action.SENDTO", Uri.parse("mailto:test@test.com"))
            .putExtra(Intent.EXTRA_SUBJECT, subject)
            .putExtra(Intent.EXTRA_TEXT, message);
            startActivity(intent);

リソースのvalues/strings.xmlにsubject要素を追加して任意のメールの件名、message要素には任意の本文を指定しておきます。
後はIntentとUriに上記のように指定すればメーラーが起動します。

2011年4月21日木曜日

AndroidManifest.xmlの権限一覧

アンドロイドアプリをインストールする際に、ユーザーはアプリが使用する機能を一覧表示させ、機能を使用させたくない場合はインストールしないなどしてセキュリティを確保します。

この時一覧表示させる為に使用されるのがAndroidManifest.xmlファイルです。
アプリを開発する際はこのファイルを編集して使用する機能権限を有効にする必要があります。

AndroidManifest.xmlファイルに設定することができる機能には以下のようなものがあります。


権限の名前内容
android.permission.ACCESS_COARSE_LOCATION低精度の位置情報の取得
android.permission.ACCESS_FINE_LOCATION高精度の位置情報の取得
android.permission.ACCESS_MOCK_LOCATIONデバッグ用の位置情報の取得
android.permission.CONTROL_LOCATION_UPDATES位置情報の更新
android.permission.ACCESS_NETWORK_STATEネットワーク状態を取得
android.permission.ACCESS_WIFI_STATEWiFiの状態を取得
android.permission.BLUETOOTHBlueToothを操作
android.permission.BLUETOOTH_ADMINBlueToothの探索と接続
android.permission.CALL_PHONE電話のダイアル(救急と警察を除く)
android.permission.CALL_PRIVILEGED電話のダイアル(救急と警察を含む)
android.permission.PROCESS_OUTGOING_CALLS電話の発信処理への介入
android.permission.MODIFY_PHONE_STATE電話の状態の書き換え
android.permission.VIBRATEバイブ機能の利用
android.permission.DEVICE_POWER低水準電源管理の利用
android.permission.WAKE_LOCK高水準電源管理の利用
android.permission.CAMERAカメラの利用
android.permission.RECORD_AUDIO音声録音の利用
android.permission.MODIFY_AUDIO_SETTINGS音声機能の設定の書き換え
android.permission.FORCE_BACK「戻る」ボタンに相当する処理
android.permission.READ_INPUT_STATEキーとスイッチの直接の読み込み
android.permission.INTERNETインターネットへの接続
android.permission.WRITE_GSERVICESGoogle mapサービスの利用
android.permission.READ_HISTORY_BOOKMARKS履歴とお気に入りの読み込み
android.permission.WRITE_HISTORY_BOOKMARKS履歴とお気に入りの書き込み
android.permission.SET_TIME日付と時刻の設定
android.permission.SET_TIME_ZONEタイムゾーンの設定
android.permission.READ_CONTACTS「連絡先」データの読み込み
android.permission.WRITE_CONTACTS「連絡先」データの書き込み
android.permission.WRITE_SETTINGS「設定」データの書き込み
android.permission.MOUNT_FORMAT_FILESYSTEMSSDカードのフォーマット
android.permission.MOUNT_UNMOUNT_FILESYSTEMSSDカードのマウント・アンマウント
android.permission.WRITE_EXTERNAL_STORAGESDカードの書き込み
android.permission.REBOOTAndroidの再起動
android.permission.RECEIVE_BOOT_COMPLETEDAndroidの起動完了の検出


AndroidManifest.xmlファイルに上記の物を書くとアプリで機能を使用することができるようになります。

2011年2月10日木曜日

EditTextのキーボードタイプ

EditTextはテキスト入力を行うためのクラスです。iPhoneではUITextFieldやUITextViewに相当する物です。


        <EditText android:inputType="text|textEmailAddress" />


inputTypeには、テキスト入力時に表示されるキーボードのタイプを指定します。
タイプ内容
text普通のテキスト入力用
textEmailAddressメールアドレス入力用
number数字入力用
numberSigned符号有り
numberDecimal10進数
date日付入力用
multiLine複数行
textAutoCorrectスペルミスの自動修正

上の例は、メールアドレスを入力する為のテキスト入力エリアを示します。キーボードもメールアドレスの入力に特化したキーボードが表示されるようになります。

他にも、

<EditText android:inputType="text|textMultiLine|textAutoCorrect" />


とすれば複数行でスペルミスを自動修正するテキスト入力エリアが表示されるようになります。

2010年11月11日木曜日

ImageViewにパラパラ漫画を表示

Androidでは、複数画像をパラパラ漫画のように表示するアニメーションをFrame-By-Frame Animationと呼ぶそうです。Frame-ByFrame AnimationはAnimationDrawableクラスを使用します。

アニメーションの内容をXMLファイルで用意しておき、それをAnimationDrawableクラスに読み込ませます。
以下のファイルをリソースのanimフォルダにanimation.xmlとしてプロジェクトに追加しておきます。

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
    <item android:drawable="@drawable/android1" android:duration="100" />
    <item android:drawable="@drawable/android2" android:duration="100" />
    <item android:drawable="@drawable/android3" android:duration="100" />
    <item android:drawable="@drawable/android4" android:duration="100" />
</animation-list>

android1〜4はアニメーションで使用する画像ファイル名です。それぞれの画像を100msecずつ表示するように指定しています。

ソースは以下のようにします。

    AnimationDrawable mAnimDrawable = null;
    ImageView imgView = null;
    ・
    ・
        // ImageViewのバックグランドにXMLファイルからアニメーションを読み込み
        imgView.setBackgroundResource(R.anim.animation);
       
        // ImageViewからAnimationDrawableを取得
        mAnimDrawable = (AnimationDrawable)imgView.getBackground();

        // アニメーション開始
        mAnim.start();

Viewを回転させたり拡大縮小させたり

Androidにもアニメーションを行わせる仕組みが予め組み込まれています。
iPhoneのアニメーションのやり方とは大きく異なります。

Androidでは1枚の画像を拡大縮小・回転・移動・透過変更させることを、Tween Animationと呼ぶそうです。 Tween AnimationはAnimationクラスを使用します。

また、複数画像をパラパラ漫画のように表示するアニメーションをFrame-By-Frame Animationと呼ぶそうです。Frame-ByFrame AnimationはAnimationDrawableクラスを使用します。

アニメーションの内容をXMLファイルで用意しておき、それをAnimationクラスに読み込ませます。
以下のファイルをリソースのanimフォルダにanimation.xmlとしてプロジェクトに追加しておきます。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha
        android:fromAlpha="0.0"
        android:toAlpha="1.0"
        android:duration="5000"
        android:repeatCount="infinite"
        android:repeatMode="restart" />
</set>

上記は透過レベルを0〜1に5秒間でじわっと変化させるアニメーションの例です。
拡大縮小・回転等の各タグの意味はDeveloperページをご覧下さい。


そしてソースを以下のようにします。

    private ImageView imgView = null;
    private Animation mAnim = null;
    ・
    ・
        imgView = (ImageView)findViewById(R.id.animView);


        // animation.xmlファイルを読み込み
        mAnim = AnimationUtils.loadAnimation(this, R.anim.animation);
        imgView.startAnimation(mAnim);

上記はXMLファイルをAnimationクラスに読み込み、ImageViewクラスに設定した画像の透過レベルをアニメーションで表示させています。

スレッド

AndroidでもiPhone同様、スレッドを使用することができます。
Androidの場合、一部のコントロールを除いて、別スレッドからメインスレッドのUIにはアクセスできないようです。(例外が発生します。)
その為、ハンドラに処理を渡してメインスレッドの方で実際の処理を行わせます。
ハンドラを使うので、android.os.Handlerをインポートしておく必要があります。

    Handler mHandler = new Handler();
    ・
    ・
        Thread th = new Thread() {
            public void run() {
                // 別スレッドの処理
                ・
                ・
                ・
                mHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        // メインスレッドのTextViewにスレッド処理終了を表示
                        mTextView1.setText("Finished");
                    }
                });
            }
        };
        th.start(); // 別スレッドの処理開始