アプリ起動時のmozLockOrientationの挙動について

66 views
Skip to first unread message

小川充

unread,
Apr 29, 2015, 11:25:34 AM4/29/15
to fire...@googlegroups.com
はじめまして。小川充(mitsuruog)と申します。
FirefoxOSアプリ開発初心者です。Flameで開発しています。

アプリ起動時に端末の向きを固定したいのですが、
WebIDEから「インストールして実行」した時と
Flame上で「アプリを停止(ホームボタンを長押ししてアプリを消す)してアプリを再起動」した時で
挙動が異なっており、どの辺りが原因かわからず困っています。

挙動はこちらです。

・WebIDEから「インストールして実行」
 アプリ起動時に固定できる
・Flame上で「アプリを停止してから再起動」
 アプリ起動時に固定できない

OSのバージョン
・2.0.0.0-prerelease

コードはこちらです。
(WebIDEから「HelloWorld」プロジェクトを作成してapp.js上に記入しています。)

window.addEventListener("load", function() {
  console.log(window.screen);
  console.log(window.screen.mozLockOrientation);
  console.log(window.screen.mozOrientation);
  window.screen.mozLockOrientation(window.screen.mozOrientation);
});


双方でWebIDEからログを確認してみましたが、正しく動作しているように見受けられます。

Screen { availWidth: 569, availHeight: 320, width: 569, height: 320, colorDepth: 32, pixelDepth: 32, top: 0, left: 0, availTop: 0, availLeft: 0 }
function mozLockOrientation()
"portrait-primary"

FirefoxOSアプリ初めてで、どの辺りから調べたら良いか当たりすら付けられていない状態です。
同じような経験された方とか、FirefoxOSのならではお作法とか、、、
何でもいいのでヒントいただけると嬉しいです。

藪下正美

unread,
May 1, 2015, 11:46:23 AM5/1/15
to fire...@googlegroups.com
 藪下です。

 確かにまわっちゃいますね。シミュレータだと横向きにしてから起動してやるとなかなかファンキーですね。

 起動時に向きを固定したあと何らかの契機で向きを変えることはありますか?
 向きを変える予定がないのであればmanifest.webappにorientationを指定するのはどうでしょうか。

https://developer.mozilla.org/ja/Apps/Manifest#orientation


2015年4月30日木曜日 0時25分34秒 UTC+9 小川充:

Sotaro Ikeda

unread,
May 1, 2015, 11:47:09 AM5/1/15
to fire...@googlegroups.com
こんにちは、小川さん。

自分はgeckoでも下のほうばかり触っているので、gaia周りで発生する問題には詳しくないのですが幾つか分かる範囲で記したいと思います。
可能性としては、以下の2つの可能性があるかもしれません。
- [1]  gecko側のpermission checkではねられている
- [2]  system appの挙動と競合していて、system appがscreen.mozUnlockOrientation()を呼び出してしまっている。

[1] については、nsScreen::GetLockOrientationPermission()でpermission checkが行われています。

[2]については、nsScreen::MozUnlockOrientation()が対応する実装になります。


かなり古い図ですが以下に以前に私が作成したgeckoのorientation周りのクラス図を描いて置いています。

あと、この辺の問題は dev-gaia MLに質問したほうが回答を得られるかもしれません。


池田



2015年4月29日水曜日 11時25分34秒 UTC-4 小川充:

藪下正美

unread,
May 1, 2015, 4:59:59 PM5/1/15
to fire...@googlegroups.com
 藪下です。


> - [2]  system appの挙動と競合していて、system appがscreen.mozUnlockOrientation()を呼び出してしまっている。
 これみたいですね。
https://github.com/mozilla-b2g/gaia/blob/master/apps/system/js/app_window.js#L1660

 画面回転設定でロックしてない且つマニフェストにorientationを設定していない時にアンロックしてますね。
 呼び元をさかのぼるとアプリ起動時のトランジションなので、アドホックですがorientationに何か設定するかsetTimeoutで300ms以上待ってからロックすれば効きます。

 どう直すべきなんでしょうねこれ。

2015年5月2日土曜日 0時47分09秒 UTC+9 Sotaro Ikeda:

小川充

unread,
May 1, 2015, 9:22:23 PM5/1/15
to fire...@googlegroups.com
藪下さん、池田さん

アドバイスありがとうございます!

manifest.webappにorientationを指定する件

そんな方法があったとは知りませんでした。
今回はボタンでロックの状態を変化させたいので、機会があれば使いたいと思います。

system appがscreen.mozUnlockOrientation()を呼び出してしまっている件

藪下さんの最後のレスにあるように、コードを少し細工することで回避できそうですね。

後ほど挙動確かめて見て、大丈夫そうであれば、
一旦このスレとしては十分な回答いただけたと思います。

池田さん、藪下さん本当にありがとうございました!

# gaiaのコードGithub上で公開されているんですね。
# 次からはこちらを当たってみます。
# ですが、こちらでディスカッションしたほうが、コミュニティとしては面白いかもですねー。

ところで、藪下さん

 どう直すべきなんでしょうねこれ。

とありますが、
アプリ開発者としては、上記の方法で回避するしかなさそうなので、
これはgaia側の不具合との認識なのでしょうか?

小川

2015年5月2日 5:59 藪下正美 <aoi...@gmail.com>:

--
このメールは Google グループのグループ「Firefox OS (Boot to Gecko)」のトピックを登録しているユーザーに送られています。
このトピックの登録を解除するには https://groups.google.com/d/topic/firefoxos/gxkD6sspagE/unsubscribe にアクセスしてください。
このグループを退会し、グループのすべてのトピックの登録を解除するには firefoxos+...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

藪下正美

unread,
May 2, 2015, 12:20:19 AM5/2/15
to fire...@googlegroups.com
 藪下です。

> 今回はボタンでロックの状態を変化させたいので、機会があれば使いたいと思います。
 orientationを設定するとアプリで解除できないと思ってたんですが、今試してみたところorientationを設定していても後からmozLockOrientationとmozUnlockOrientationが効いているようなのでorientationの設定でよさそうです。


> アプリ開発者としては、上記の方法で回避するしかなさそうなので、
> これはgaia側の不具合との認識なのでしょうか?
 はい。その認識です。
 アプリ起動時のアニメーションはアプリが意識することではないので、アニメーション終了のイベントを以てアプリの起動完了とするのはナンセンスだと思います。
 一般的なHTMLのお作法としてアプリの起動完了というのはloadイベントやDOMContentLoadedイベントであるので、そのタイミングでアプリの向きをロックしてもシステムにアンロックされるのは意図しない動作といっていいと思います。

 一応バグ起票してます。
https://bugzilla.mozilla.org/show_bug.cgi?id=1160660


2015年5月2日土曜日 10時22分23秒 UTC+9 小川充:

小川充

unread,
May 2, 2015, 5:41:59 AM5/2/15
to firefoxos
藪下さん

バグ起票ありがとうございます!
 
 orientationを設定するとアプリで解除できないと思ってたんですが、今試してみたところorientationを設定していても後からmozLockOrientationとmozUnlockOrientationが効いているようなのでorientationの設定でよさそうです。

setTimeoutの方は、設定したtimeoutの時間まで端末の回転が許される状態でしたので、
manifest.webappのorientationにportrait-primaryをセットして、一旦回避することにしました。
これで、望みの動きになりました。

この度は、ありがとうございました。

小川

Reply all
Reply to author
Forward
0 new messages