SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
進撃の⽕狐裏話
-Cameraデバイスは使えません-
@Kaikias_lys
自己紹介
濵田 怜実
Twitter: @Kaikias_lys
Android関係のお仕事やってます。
最近は提督になったらしい。
C84ではこんなもの展示してました
XperiaZ (C6603) + JCROM すーぱーそに子仕様
それはともかく…
C84でこんな本出しました
Mozilla Japanさんにも10冊納品されたとか…?
完売御礼!
完売御礼!
ありがとうございます!
ありがとうございます!
事の始まり
この辺がFirefox OS本を書かないかと言って
きた
ホイホイ乗った
結果:ごらんの有様だよ!
担当箇所
デバイス周りのところ
(10、11、12章+3章の後半(実機部分))
10章:Camera
11章:GPS
12章:Vibrator
3章後半:実機での開発環境構築方法
合計11ページ
(本文書いた7人のうちで一番多い(想定外))
前途多難?
面白そうだと乗ったは良いものの…
実はJavascriptを知らない
HTML5?何それおいしいの?
そもそもFirefox OSにはあんまり期待していない
出るのが遅すぎ
?
意外と…
やってみたら意外と簡単
GPSとVibratorは楽勝
ところが…
Cameraが曲者
どういうことか?
Camera API
アプリの許可設定 / App permissions
https://developer.mozilla.org/en-US/docs/WebAPI/Camera
https://developer.mozilla.org/en-US/docs/Web/Apps/App_permissions
つまり、
CameraデバイスをAndroidのように直接叩く
アプリはFirefox OSではcertified applications
でしか作れない!
一般の開発者は(現状)Cameraデバイスを直
接叩いたアプリケーションを作れない!
=
カメラ系アプリのDeveloper全滅
妥協案
Camera API
要約
Cameraを使いたかったらWeb Activities APIを使え。
葛藤
certified applicationでなければ使えないもの
を解説して意味があるか?
残念アプリになるが、Web Activities (pick)を
使って解説するか?
今回はWeb Activitiesで勘弁してやろう!
という事で、進撃の⽕狐ではCamera=Web Activities (pick)
を使って解説しました。(実際はページ数が足りなかっただけ)
でもそれでは面白くないので
今日はcertified applicationの
作り方を解説します
必要なもの
UbuntuのインストールされたPC or Mac
=Firefox OSのビルド環境
Firefox OS用のアプリ開発環境
KEONとかPEAK、Nexus Sなどの実機(あれ
ば)
やる気(必須)
手順
Firefox OSのbuild環境を整える[1]
githubからB2GのSourceをcloneする[2]
ターゲットデバイスにあわせて./config.shす
る
certified applicationを作る
buildする
端末に焼く
[1] https://developer.mozilla.org/ja/docs/Mozilla/Boot_to_Gecko/Building_and_installing_Firefox_OS
[2] git://github.com/mozilla-b2g/B2G.git
簡単ですね!
これだけじゃ何なので…
Cameraアプリをpreinstallする
Web Activities版と同様のPreviewを表示して
撮影できるだけのアプリを作ってpreinstallし
ます
manifest.webappを変更する
manifest.webappにpermissionとtypeを設定す
る
"permissions": {
"device-storage:pictures": {
"access": "readwrite“
},
"camera": {},
"storage": {}
},
"type": "certified",
htmlを変更する
今回は単純にCamera APIを叩くだけのアプリ
なので簡単に
<body>
<h1>Camera demo</h1>
<div id="content">
<video></video>
<button id="capture-btn">capture</button>
</div>
<script type="text/javascript" src="js/app.js"></script>
</body>
app.jsをゴリゴリ書く
var storage = navigator.getDeviceStorage('pictures');
var display = document.getElementsByTagName('video')[0];
var cameras = window.navigator.mozCameras;
var options = {
camera: cameras.getListOfCameras()[0]
};
var pictureOptions = {
rotation: 0,
pictureSize: null,
fileFormat: null
};
var captureBtn = document.getElementById('capture-btn');
var cameracontrol = null;
function onStreamReady(stream) {
display.mozSrcObject = stream;
display.play();
};
function onFocusPossible(success) {
if(success){
console.log("The image has been focused");
}else{
console.log("The image has not been focused");
}
};
function onFocusNotPossible(error) {
console.log("The camera is not able to focus anything");
console.log(error);
};
function onSuccess(camera) {
var size = camera.capabilities.previewSizes[0];
cameracontrol = camera;
camera.getPreviewStream(size, onStreamReady);
camera.autoFocus(onFocuesPossible, onFocusNotPossible);
};
function onError(error) {
console.warn(error);
};
function onPictureTaken(blob) {
storage.addNamed(blob, 'test.jpg');
cameracontrol.resumePreview();
};
cameras.getCamera(options, onSuccess, onError);
captureBtn.addEventListener('click', function() {
pictureOptions.pictureSize = cameracontrol.capabilities.pictureSizes[0];
pictureOptions.fileformat = cameracontrol.capabilities.fileFormats[0];
cameracontrol.takePicture(pictureOptions, onPictureTaken);
}
);
certified application
Simulatorにinstallするとこうなります
どこに入れてbuildすればいいか?
$B2Groot/gaia/apps/ の下
放り込んでおくだけでbuild対象になるので楽!
アプリケーションの構成
通常のFirefox OS用アプリケーションと同じ
でいけるっぽい?
buildしたROMを焼いて起動する
preinstallされてる!
こいつ、動くぞ!?
左:プレビュー、右:撮影した画像
Camera applicationに潜む罠
KEONとNexus Sで挙動が違う
navigator.mozCameras() の応答
KEON
JavaScript Error: "TypeError: navigator.mozCameras is null"
{file: "app://orecamera.gaiamobile.org/js/app.js" line: 6}
Nexus S
No problem.
navigator.mozCameras()はCameraを使用する場合に最初に呼ぶので
動かないと困る。
ただ、標準のCameraアプリでもCallしているように⾒えるので、
何か手順を踏む必要があるのかも?(未調査)
Error
Nexus Sでは一⾒正しく動くように⾒えるが、
PreviewScreenが90度回転した状態で表示さ
れる。
→このPPTのScreenShotはcssでrotateして
無理やり解決している
バグっぽい気がするけど…Nexus Sでしか確認で
きてないので良くわからない。
Error
autofocusが利かない
Callする位置が違う?
function onSuccess(camera) {
var size = camera.capabilities.previewSizes[0];
cameracontrol = camera;
camera.getPreviewStream(size, onStreamReady);
camera.autoFocus(onFocuesPossible, onFocusNotPossible);
};
注意?
端末にbuildしたimageを焼く場合、
userdata.imgも焼く必要がある?
preinstallのアプリケーションが増えた場合は焼か
ないと⽴ち上がらなかった
まとめ
普通の開発者でも環境さえ揃っていれば
certified applicationを作って動かす事は可能
課題
debug方法
いちいちbuildするのは面倒
ご清聴ありがとうございました。

Weitere ähnliche Inhalte

Was ist angesagt?

Summercamp2020 group1
Summercamp2020 group1Summercamp2020 group1
Summercamp2020 group1openrtm
 
天体を静止画として 長時間撮影できる装置 の紹介
天体を静止画として長時間撮影できる装置 の紹介天体を静止画として長時間撮影できる装置 の紹介
天体を静止画として 長時間撮影できる装置 の紹介Masaki Otsuki
 
Ruby関西76 gr citrusの使い方#2
Ruby関西76 gr citrusの使い方#2Ruby関西76 gr citrusの使い方#2
Ruby関西76 gr citrusの使い方#2三七男 山本
 
ET2016 小さなRubyボード GR-CITRUSの紹介
ET2016 小さなRubyボード GR-CITRUSの紹介ET2016 小さなRubyボード GR-CITRUSの紹介
ET2016 小さなRubyボード GR-CITRUSの紹介三七男 山本
 
メガドラ実機で自作のROMファイルを動かしてみた話
メガドラ実機で自作のROMファイルを動かしてみた話メガドラ実機で自作のROMファイルを動かしてみた話
メガドラ実機で自作のROMファイルを動かしてみた話Yuma Ohgami
 
セガサターンマシン語プログラミングの紹介
セガサターンマシン語プログラミングの紹介セガサターンマシン語プログラミングの紹介
セガサターンマシン語プログラミングの紹介Yuma Ohgami
 

Was ist angesagt? (9)

Summercamp2020 group1
Summercamp2020 group1Summercamp2020 group1
Summercamp2020 group1
 
天体を静止画として 長時間撮影できる装置 の紹介
天体を静止画として長時間撮影できる装置 の紹介天体を静止画として長時間撮影できる装置 の紹介
天体を静止画として 長時間撮影できる装置 の紹介
 
Ruby関西76 gr citrusの使い方#2
Ruby関西76 gr citrusの使い方#2Ruby関西76 gr citrusの使い方#2
Ruby関西76 gr citrusの使い方#2
 
ET2016 小さなRubyボード GR-CITRUSの紹介
ET2016 小さなRubyボード GR-CITRUSの紹介ET2016 小さなRubyボード GR-CITRUSの紹介
ET2016 小さなRubyボード GR-CITRUSの紹介
 
メガドラ実機で自作のROMファイルを動かしてみた話
メガドラ実機で自作のROMファイルを動かしてみた話メガドラ実機で自作のROMファイルを動かしてみた話
メガドラ実機で自作のROMファイルを動かしてみた話
 
20190828 sd by kitazaki_t0
20190828 sd by kitazaki_t020190828 sd by kitazaki_t0
20190828 sd by kitazaki_t0
 
Rosjp37 live ros
Rosjp37 live rosRosjp37 live ros
Rosjp37 live ros
 
セガサターンマシン語プログラミングの紹介
セガサターンマシン語プログラミングの紹介セガサターンマシン語プログラミングの紹介
セガサターンマシン語プログラミングの紹介
 
ET2016展示パネル
ET2016展示パネルET2016展示パネル
ET2016展示パネル
 

Ähnlich wie 進撃の火狐裏話 -cameraデバイスは使えません-

ICSをビルドしてみた
ICSをビルドしてみたICSをビルドしてみた
ICSをビルドしてみたkinneko
 
LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?Ryota Murohoshi
 
第9回 北関東3県工業高校生徒研究発表大会
第9回 北関東3県工業高校生徒研究発表大会第9回 北関東3県工業高校生徒研究発表大会
第9回 北関東3県工業高校生徒研究発表大会Masaki Kobayashi
 
PhotonCloudで一ヶ月ゲーム作った話
PhotonCloudで一ヶ月ゲーム作った話PhotonCloudで一ヶ月ゲーム作った話
PhotonCloudで一ヶ月ゲーム作った話Hiroto Imoto
 
AllwinnerタブレットのOSを作ってみる(中編)
AllwinnerタブレットのOSを作ってみる(中編)AllwinnerタブレットのOSを作ってみる(中編)
AllwinnerタブレットのOSを作ってみる(中編)shimadah
 

Ähnlich wie 進撃の火狐裏話 -cameraデバイスは使えません- (6)

ICSをビルドしてみた
ICSをビルドしてみたICSをビルドしてみた
ICSをビルドしてみた
 
LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?LINQ、Select連弾ってやります?
LINQ、Select連弾ってやります?
 
第9回 北関東3県工業高校生徒研究発表大会
第9回 北関東3県工業高校生徒研究発表大会第9回 北関東3県工業高校生徒研究発表大会
第9回 北関東3県工業高校生徒研究発表大会
 
Gorilla.vim#6
Gorilla.vim#6Gorilla.vim#6
Gorilla.vim#6
 
PhotonCloudで一ヶ月ゲーム作った話
PhotonCloudで一ヶ月ゲーム作った話PhotonCloudで一ヶ月ゲーム作った話
PhotonCloudで一ヶ月ゲーム作った話
 
AllwinnerタブレットのOSを作ってみる(中編)
AllwinnerタブレットのOSを作ってみる(中編)AllwinnerタブレットのOSを作ってみる(中編)
AllwinnerタブレットのOSを作ってみる(中編)
 

Kürzlich hochgeladen

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 

Kürzlich hochgeladen (7)

PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 

進撃の火狐裏話 -cameraデバイスは使えません-