Hatena::ブログ(Diary)

スマートフォンアプリ開発会社のエンジニアブログ

2012-12-11

アプリ制作実習〜カメラアクティビティ起動〜

こんばんは。

本日もアプリ制作やってました。
どのようなアプリかと言いますとアルバム(ギャラリー)アプリのようなもので、
写真をポラロイド風に加工して保存し、下に手書き風のタイトルを付けて
管理・鑑賞してもらおうというアプリなんですが、

やはりユーザーにどんどん新しい画像を撮って保存してほしい!ので、
カメラアプリを起動して画像を表示するという機能を勉強しました。
新規写真を撮るボタンを押すとカメラやギャラリーが起動するというようにしたいと思います。

public class PhotoNewActivity extends Activity {
	private static final int REQUEST_IMAGE_CAPTURE = 0;
	private static final int REQUEST_IMAGE_GALLERY = 1;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.photo_new);
		Button impt = (Button) findViewById(R.id.button1);

		impt.setOnClickListener(new View.OnClickListener() {
			// ギャラリー・写真へ移動できるようにする
			@Override
			public void onClick(View v) {
				String[] str_items = { "カメラから選択", "ギャラリーから選択", "キャンセル" };
				new AlertDialog.Builder(PhotoNewActivity.this)
						.setTitle("選択")
						.setItems(str_items,
								new DialogInterface.OnClickListener() {
									public void onClick(DialogInterface dialog,
											int which) {
										switch (which) {
										case 0:
											startCamera();
											break;
										case 1:
											startGallery();
											break;
										default:
											break;
										}
									}
								}).show();
			}
		});
	}

	public void startCamera() {
		// カメラアプリを起動する
		Intent intent = new Intent();// インテントのインスタンス
		intent.setAction("android.media.action.IMAGE_CAPTURE");// インテントにアクションをセットする
		startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);// カメラアプリ起動する

	}

	public void startGallery() {
		// ギャラリーへ遷移
		Intent i = new Intent();
		i.setType("image/*");
		i.setAction(Intent.ACTION_GET_CONTENT);
		startActivityForResult(i, REQUEST_IMAGE_GALLERY);
	}
	@Override
	public void onActivityResult(int rqCode, int rsltCode, Intent data) {
		switch (rqCode) {
		case 0:
			if (rsltCode == RESULT_OK) {
				try {
					// 画像データの取得
					Bitmap img = (Bitmap) data.getExtras().get("data");
					ImageView rslt = (ImageView) findViewById(R.id.imageView1);
					rslt.setImageBitmap(img);
				} catch (nullPointerException e) {// nullの例外だと思われ
				}

			}
			break;
		case 1:
			if (rsltCode == RESULT_OK) {
				try {
					// 画像データの取得
					Bitmap img = (Bitmap) data.getExtras().get("data");
					ImageView rslt = (ImageView) findViewById(R.id.imageView1);
					rslt.setImageBitmap(img);
				} catch (nullPointerException e) {// nullの例外だと思われ

				}
			}
			break;
		}
	}



これ実行してみたのですがなんか画像が荒い…
調べてみると、この方法( onActivityResultメソッド)は画像サイズが小さくなってしまうようです。
データベースに保存する機能もついていないし
せっかく高性能カメラを使っているのでデータサイズはそのままで保存する方法を探します。

あと、ギャラリーから選んだ画像は同じようにやっても、表示してくれないですね。
こちらも改良しなくてはならないです。
はぁ…

UIWebViewでvideoタグを使うとき いきなりfull screenにしない方法

videoタグタップしたらいきなりfull screenになってしもうた

ビンゴ中西です。

HTML5のvideoタグをUIWebViewの中から使ってみました。
するとどうでしょう! タップした瞬間にいきなり全画面表示!
いやいやいや いきなりすぎる! What's Happening!!
ということで、いきなりは全画面にならない方法。

インラインで表示したい

full screenの反対それがインライン表示だ!
厳密に反対の意味になるのかは知らないが、
とりあえずインラインにすればやりたいことが実現される。

ではどうすればよいのか?

リファレンスさんや! リファレンスさんに書いとったでえええ!
http://developer.apple.com/library/ios/#documentation/uikit/reference/UIWebView_Class/Reference/Reference.html

YESや! YESにするんや!!

@property(nonatomic) BOOL allowsInlineMediaPlayback

このプロパティをYESにしてやりましょう。

まだ足りひんのや

これだけでいけるかと思ったんですけど、なにやら
webkit-playsinlineを足せと英語で書いてあるように読める。
どこやどこに足したらええのんや!
調べるとHTML5のvideoタグに足せるみたい。

<video id="Video1" controls height="240" width="100%" title="video element" src="hoge.m3u8" poster="poster.png" webkit-playsinline>HTML5 Video is required for this example</video>

こんな感じ。

full screenが終了したのフックできる?

videoタグのコントローラには全画面にするボタンがあるので、
これをタップされるとまだ全画面にすることはできる。

そこで気になったのだが、
full screen中に、左上に「Done」ボタンが表示されているが、
これがタップされfull screenが終了したことを知ることはできないのだろうか?
ということ


できるようだ、ただしドキュメントに書いていないことをしているので、リジェクトされるかもしれないと記載されている。
ios - How to receive NSNotifications from UIWebView embedded YouTube video playback - Stack Overflow

引用ソース

- (void)playerWillExitFullscreen:(NSNotification *)notification
{
    //do something...
}

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(playerWillExitFullscreen:)
                                             name:@"UIMoviePlayerControllerWillExitFullscreenNotification" 
                                           object:nil];

たしかにNotificationされることを確かめることができたが、
使うか使わないかは各人の判断になることだろう。

アプリ開発なら株式会社ガラパゴス iPhoneアプリ開発Androidアプリ開発なら株式会社ガラパゴス