ストリートビューで任意の場所を表示するには、以下のように指定します。
// 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と指定します。
iPhone開発者によるAndroidプログラミング
C, C++, C#, Objective-C開発者によるAndroidプログラミング日記。
2011年4月23日土曜日
他の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に上記のように指定すればメーラーが起動します。
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ファイルに設定することができる機能には以下のようなものがあります。
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_STATE | WiFiの状態を取得 |
android.permission.BLUETOOTH | BlueToothを操作 |
android.permission.BLUETOOTH_ADMIN | BlueToothの探索と接続 |
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_GSERVICES | Google 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_FILESYSTEMS | SDカードのフォーマット |
android.permission.MOUNT_UNMOUNT_FILESYSTEMS | SDカードのマウント・アンマウント |
android.permission.WRITE_EXTERNAL_STORAGE | SDカードの書き込み |
android.permission.REBOOT | Androidの再起動 |
android.permission.RECEIVE_BOOT_COMPLETED | Androidの起動完了の検出 |
AndroidManifest.xmlファイルに上記の物を書くとアプリで機能を使用することができるようになります。
2011年2月10日木曜日
EditTextのキーボードタイプ
EditTextはテキスト入力を行うためのクラスです。iPhoneではUITextFieldやUITextViewに相当する物です。
<EditText android:inputType="text|textEmailAddress" />
inputTypeには、テキスト入力時に表示されるキーボードのタイプを指定します。
上の例は、メールアドレスを入力する為のテキスト入力エリアを示します。キーボードもメールアドレスの入力に特化したキーボードが表示されるようになります。
他にも、
<EditText android:inputType="text|textMultiLine|textAutoCorrect" />
とすれば複数行でスペルミスを自動修正するテキスト入力エリアが表示されるようになります。
inputTypeには、テキスト入力時に表示されるキーボードのタイプを指定します。
タイプ | 内容 |
text | 普通のテキスト入力用 |
textEmailAddress | メールアドレス入力用 |
number | 数字入力用 |
numberSigned | 符号有り |
numberDecimal | 10進数 |
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();
アニメーションの内容を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クラスに設定した画像の透過レベルをアニメーションで表示させています。
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(); // 別スレッドの処理開始
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(); // 別スレッドの処理開始
登録:
投稿 (Atom)