結論から言うとカメラアプリを起動すると呼び出し元が縦向き(Portrait)でも、必ず横向き(Landscape)にされます。
よーするに、変な動きします。
大抵のアプリは以下の2つの条件がそろって問題がおきません。
・カメラが横向きじゃないと使えなかった
・撮影した画像をそのままの向きで見て加工などをするという関係でアプリが横向き専用だった
この場合は、もともと画面が横向きなのでセーフ。
そうそう、カメラの呼び出し方法は「AndroidSDK開発のレシピ―104個のレシピで学ぶAndroidアプリ開発の極意」塚田 翔也 (著) の、レシピ088あたりを参考にしてくださいね。(もちろん宣伝ですw)
話を戻して。
回避方法としては、Y.A.M の 雑記帳 「Android 画面の縦横切り替え時に元の画面を保存」を参考に「onConfigurationChanged」イベントを拾うように変更します。
マニフェストには下記の記述で行けると思います。
<activity android:name=".HelloWorld" android:label="@string/app_name" android:configChanges="orientation|keyboardHidden">
なんで、そんなことをしないといけないかというと以下に問題が発生している時のイベントの流れと対策後のイベントの流れを比較してください。
対策前(縦状態からスタート)
11-24 23:35:23.331: DEBUG/test(14180): onCreate
11-24 23:35:23.417: DEBUG/test(14180): onStart
11-24 23:35:23.417: DEBUG/test(14180): onResume
カメラをstartActivityForResultで起動
11-24 23:35:29.378: DEBUG/test(14180): onPause
11-24 23:35:30.436: DEBUG/test(14180): onStop
カメラ→撮影→OK
11-24 23:35:48.167: DEBUG/test(14180): onDestroy : getChangingConfigurations=128
11-24 23:35:48.171: DEBUG/test(14180): onCreate
これ困るよね
11-24 23:35:48.198: DEBUG/test(14180): onStart
11-24 23:35:48.198: DEBUG/test(14180): onActivityResult
11-24 23:35:48.311: DEBUG/test(14180): onResume
11-24 23:35:48.405: DEBUG/test(14180): onPause
11-24 23:35:48.409: DEBUG/test(14180): onStop
11-24 23:35:48.409: DEBUG/test(14180): onDestroy : getChangingConfigurations=128
11-24 23:35:48.421: DEBUG/test(14180): onCreate
11-24 23:35:48.444: DEBUG/test(14180): onStart
11-24 23:35:48.448: DEBUG/test(14180): onResume
11-24 23:35:48.448: DEBUG/test(14180): onPause
11-24 23:35:48.448: DEBUG/test(14180): onStop
11-24 23:35:48.448: DEBUG/test(14180): onDestroy : getChangingConfigurations=128
11-24 23:35:48.456: DEBUG/test(14180): onCreate
11-24 23:35:48.479: DEBUG/test(14180): onStart
11-24 23:35:48.479: DEBUG/test(14180): onResume
onDestroyでコンフィグの変更状況を確認すると128の回転が発生している。11-24 23:35:23.417: DEBUG/test(14180): onStart
11-24 23:35:23.417: DEBUG/test(14180): onResume
カメラをstartActivityForResultで起動
11-24 23:35:29.378: DEBUG/test(14180): onPause
11-24 23:35:30.436: DEBUG/test(14180): onStop
カメラ→撮影→OK
11-24 23:35:48.167: DEBUG/test(14180): onDestroy : getChangingConfigurations=128
11-24 23:35:48.171: DEBUG/test(14180): onCreate
これ困るよね
11-24 23:35:48.198: DEBUG/test(14180): onStart
11-24 23:35:48.198: DEBUG/test(14180): onActivityResult
11-24 23:35:48.311: DEBUG/test(14180): onResume
11-24 23:35:48.405: DEBUG/test(14180): onPause
11-24 23:35:48.409: DEBUG/test(14180): onStop
11-24 23:35:48.409: DEBUG/test(14180): onDestroy : getChangingConfigurations=128
11-24 23:35:48.421: DEBUG/test(14180): onCreate
11-24 23:35:48.444: DEBUG/test(14180): onStart
11-24 23:35:48.448: DEBUG/test(14180): onResume
11-24 23:35:48.448: DEBUG/test(14180): onPause
11-24 23:35:48.448: DEBUG/test(14180): onStop
11-24 23:35:48.448: DEBUG/test(14180): onDestroy : getChangingConfigurations=128
11-24 23:35:48.456: DEBUG/test(14180): onCreate
11-24 23:35:48.479: DEBUG/test(14180): onStart
11-24 23:35:48.479: DEBUG/test(14180): onResume
対策後(縦状態からスタート)
11-24 23:32:53.182: DEBUG/test(14012): onCreate
11-24 23:32:53.362: DEBUG/test(14012): onStart
11-24 23:32:53.362: DEBUG/test(14012): onResume
カメラをstartActivityForResultで起動
11-24 23:33:00.432: DEBUG/test(14012): onPause
11-24 23:33:01.780: DEBUG/test(14012): onStop
カメラ→撮影→OK
11-24 23:33:40.053: DEBUG/test(14012): onConfigurationChanged : newConfig={ scale=1.0 imsi=0/0 loc=ja_JP touch=3 keys=1/1/2 nav=1/1 orien=2 layout=34 uiMode=17 seq=247 FlipFont=0}
orien=2で横向きになってる
11-24 23:33:40.053: DEBUG/test(14012): onActivityResult
11-24 23:33:40.151: DEBUG/test(14012): onStart
11-24 23:33:40.151: DEBUG/test(14012): onResume
11-24 23:33:40.186: DEBUG/test(14012): onConfigurationChanged : newConfig={ scale=1.0 imsi=0/0 loc=ja_JP touch=3 keys=1/1/2 nav=1/1 orien=1 layout=34 uiMode=17 seq=248 FlipFont=0}
orien=1で縦に戻ってる
11-24 23:32:53.362: DEBUG/test(14012): onStart
11-24 23:32:53.362: DEBUG/test(14012): onResume
カメラをstartActivityForResultで起動
11-24 23:33:00.432: DEBUG/test(14012): onPause
11-24 23:33:01.780: DEBUG/test(14012): onStop
カメラ→撮影→OK
11-24 23:33:40.053: DEBUG/test(14012): onConfigurationChanged : newConfig={ scale=1.0 imsi=0/0 loc=ja_JP touch=3 keys=1/1/2 nav=1/1 orien=2 layout=34 uiMode=17 seq=247 FlipFont=0}
orien=2で横向きになってる
11-24 23:33:40.053: DEBUG/test(14012): onActivityResult
11-24 23:33:40.151: DEBUG/test(14012): onStart
11-24 23:33:40.151: DEBUG/test(14012): onResume
11-24 23:33:40.186: DEBUG/test(14012): onConfigurationChanged : newConfig={ scale=1.0 imsi=0/0 loc=ja_JP touch=3 keys=1/1/2 nav=1/1 orien=1 layout=34 uiMode=17 seq=248 FlipFont=0}
orien=1で縦に戻ってる
オマケ
対策前(横状態からスタート)
11-24 23:58:10.874: DEBUG/test(14327): onCreate
11-24 23:58:10.983: DEBUG/test(14327): onStart
11-24 23:58:10.983: DEBUG/test(14327): onResume
カメラをstartActivityForResultで起動
11-24 23:58:14.077: DEBUG/test(14327): onPause
11-24 23:58:14.874: DEBUG/test(14327): onStop
カメラ→撮影→OK
11-24 23:58:22.628: DEBUG/test(14327): onActivityResult
11-24 23:58:23.096: DEBUG/test(14327): onStart
11-24 23:58:23.096: DEBUG/test(14327): onResume
11-24 23:58:10.983: DEBUG/test(14327): onStart
11-24 23:58:10.983: DEBUG/test(14327): onResume
カメラをstartActivityForResultで起動
11-24 23:58:14.077: DEBUG/test(14327): onPause
11-24 23:58:14.874: DEBUG/test(14327): onStop
カメラ→撮影→OK
11-24 23:58:22.628: DEBUG/test(14327): onActivityResult
11-24 23:58:23.096: DEBUG/test(14327): onStart
11-24 23:58:23.096: DEBUG/test(14327): onResume
まい
タグはどうやって開くんですか??
まい
GALAXY Sのカメラを縦保存できるようにしたいんですが、タグを追加するのは理解できましたが、タグ自体はどうやって開くんですか??
あやね
>まいさん
こんにちわ
タグとは、マニフェストに追加する内容のことでしょうか?
タグを開くとはどお言うことでしょうか?AndroidManifest.xmlに追記(編集)する内容ですので難しい内容ではないと思うのですが。
勘違いでしたらすみません。
まい
返信ありがとうございます
スマートフォンに変えたばかりで、私の質問の意味が分からなかったらすいません。。。
上のタグを追加する場所は、GALAXYsの、どのファイル(フォルダ?)の場所を開けばいいですか??
まい
すいません。
タグではなくソースコードです。
まい
パソコンでGALAXY Sのソースを開くためのアプリが必要ですか?
まい
アプリじゃなくてソフトの書き間違いです。。。
ネットでも調べてみましたが、ソフトも色々あって、ブログのソース編集くらいしかした事ない私には少し難しいですかね。。。?
たくさん書き込みしてしまってすいません(+_+)
あやね
>まいさん
こんばんわ
この記事の話はAndroid用のアプリを作成する時の話です。
普通に使用する場合は特に気にする必要のない事なのです。
紛らわしいくなってしまってすみません。
なのでスルーでOKですよ。
kengo
大変有用な情報ありがとうございます。
縦横の問題、解決しました。
ところで、
Galaxy Sの標準カメラアプリを呼び出して、
撮影した画像をサーバにアップロードする、
というアプリを作りたいのですが、
「カメラの呼び出し方法は「AndroidSDK開発のレシピ―104個のレシピで学ぶAndroidアプリ開発の極意」塚田 翔也 (著) の、レシピ088あたり」
のやりかただと、異なるファイル名の同じ画像が2枚できてしまいます。
(1つは[yyyy-mm-dd hh.mm.ss].jpg、もうひとつは[13ケタの数字].jpg)
同じ画像が2枚できてしまうのは変な感じがするのですが、解決法がわかりません。
onActivityResultで取得したいのは撮影・保存された画像のパスだけなのですが、方法をご存知でしたらご教授いただけないでしょうか。
いきなりで大変恐縮ですが、よろしくお願いします。
あやね
>kengoさん
拙い文章でお役に立ててうれしいです。
さて、ご質問の件ですがコチラのサイトに解決方法が紹介されていますので参考にしてください。
http://d.hatena.ne.jp/gabuchan/20101125/1290681748