質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

3回答

2853閲覧

Androidの停止&回転&リスタートと単なる回転を区別したい

TAKE_SS

総合スコア40

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2018/11/13 05:33

編集2018/11/13 07:51

実現したいこと

Androidで、起動時及びリスタート時にパスワード画面を表示する処理を
作りたい
ただし、回転(縦画面から横画面、又はその逆)させただけの時はパスワード画面は表示させない
(回転&リスタートの場合は、リスタートなのでパスワードを表示させる)

うまくいかない点

単にデバイスを回転させると、OnPauseやOnStopのあと、OnCreateが再度呼ばれ(savedInstanceState!=NULL)、リスタート時はOnCreateが呼び出されないので、そこを利用して判断するようにしたのですが、一旦アプリを停止(pause)した後、回転させた上でリスタートすると回転時と同様の流れになってしまい、パスワード画面にする事が出来ませんでした
(回転とリスタートの区別は可能)

停止&回転&リスタートと回転のみをうまく区別する方法はないでしょうか

確認したライフサイクル

<回転時(縦から横又はその逆>
回転操作 -> OnPause -> OnStop -> OnDestroy -> OnCreate(savedInstanceState!=NULL) -> OnStart -> OnResume

<回転&リスタート時>
停止操作 -> OnPause -> OnStop
回転操作
リスタート操作 -> OnDestroy -> OnCreate(savedInstanceState!=NULL) -> OnStart -> OnResume

<リスタート時>
停止操作 -> OnPause -> OnStop
リスタート操作 -> OnRestart -> OnStart -> OnResume

補足

Visual Studio 2017 xamarin.Android、C# 使用
ターゲットはAndroid 5.1、Android 6、Android 7.0 使用

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2018/11/13 05:39

はなしがちとワケワカメですが、回転とはなんの回転のはなしでしょうか
TAKE_SS

2018/11/13 06:04

わかりにくくてすいません
TAKE_SS

2018/11/13 06:04

回転とは、デバイスを縦画面から横画面、又はその逆にすることです
guest

回答3

0

自己解決

とりあえず暫定対策にはなりますが、OnStopを検出時に時間を記録し、OnStart検出時に1秒以上経過していたら、回転&リスタートと判定するようにします。
回転だけなら1秒以内で動作するでしょうし、暫定対策にはなるかと思いましたので。
もっと良い方法があれば良いのですが。

投稿2018/11/14 02:06

TAKE_SS

総合スコア40

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

画面回転時にActivityの再生成をしないようにしてみるのはどうでしょう?
AndroidManifest.xml内でconfigChanges属性の設定を行うことによって、指定のActivityの画面回転時の再生成を抑制することができます。

xml

1android:configChanges="orientation|screenSize"

この設定をするとただの画面回転ではonCreateが呼ばれなくなるので、リスタート+画面回転の場合と区別ができると思います。画面回転時になにか処理を行いたい場合にはonConfigurationChangedのライフサイクルメソッドを利用してください。

投稿2018/11/13 12:42

kakajika

総合スコア3131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TAKE_SS

2018/11/14 00:42

回答ありがとうございます Activityの再生成をしない場合、縦用レイアウトと横用レイアウトの自動切り替えが行われないということになります。切替は動いて欲しかったのですが。。 onConfigurationChangedでレイアウトの再配置を都度行う必要があるということですかね。。。。
TAKE_SS

2018/11/14 01:11

レイアウト全体を横用/縦用ですべてロジックで書き換える方法ってなんでしょう 現実的でも無いような気がしています。(Androidではよくあることなのでしょうか) 他に方法があれば良いのですが。。。
kakajika

2018/11/14 03:34

なるほど、レイアウトの切り替えも行いたいという要件があったのですね。 そういうことなら、代わりにonRetainNonConfigurationInstanceが利用できると思います。このライフサイクルメソッドは(たしか)画面回転による再生成のときにしか呼ばれません。
TAKE_SS

2018/11/14 03:52

回答ありがとうございます 確認したところ、onRetainNonConfigurationInstanceは画面回転の時に呼ばれるのですが、停止→画面回転→リスタートの時もやはり回転が入っているので呼ばれるようです リスタートが必ず分かるイベント等の情報があれば良いのですが、停止中とはいえ回転するから無理なのかもしれません。
guest

0

Androidのことはよく分からないのですが、質問に書かれたライフサイクルを見た限りでは、停止したことを覚えておくだけでいいように思えるのですが。

投稿2018/11/13 07:46

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TAKE_SS

2018/11/13 07:54

停止は操作なのでプログラムから認識出来ません 発生するイベントがライフサイクルなのですが、回転操作の時と、停止&回転&リスタートで差がないようにみえるので、何か方法がないかと思案しているところです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問